为什么 makefile shell 结果与在 shell 中执行相同操作不同?

发布于 2024-08-13 18:54:41 字数 512 浏览 2 评论 0原文

GNU makefile 内容为:

SVNVERSION_NUMBER := $(shell svnversion --version | perl -lne 'print $1 if /version (\d+.\d+.\d+)/')

$(error $(SVNVERSION_NUMBER))

我得到的结果为:

Makefile:3: *** svnversion, version 1.6.2 (r37639).  Stop.

但是,在 shell 中,如果我输入:

svnversion --version | perl -lne 'print $1 if /version (\d+.\d+.\d+)/'

我得到的结果:

1.6.2

显然,我的 shell 语法没有按照我的想法进行,但我不清楚为什么。

谢谢。

With a GNU makefile content of:

SVNVERSION_NUMBER := $(shell svnversion --version | perl -lne 'print $1 if /version (\d+.\d+.\d+)/')

$(error $(SVNVERSION_NUMBER))

I get a result of:

Makefile:3: *** svnversion, version 1.6.2 (r37639).  Stop.

However, at the shell if I type:

svnversion --version | perl -lne 'print $1 if /version (\d+.\d+.\d+)/'

I get the result:

1.6.2

Clearly, my shell syntax is not doing what I think it is, but I'm not clear on why.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

深海不蓝 2024-08-20 18:54:41

$ 在 make 字符串中是特殊的。 $$ 表示 perl 命令中的文字美元符号。

$ is special in make strings. $$ for a literal dollar sign in the perl command.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文