GNU 在多行变量声明中做出了差异
我读了这个问题,我很惊讶它不起作用:
所以我自己尝试了一下,得到了同样的结果。这是一个示例 makefile:
define foo
bar
baz
endef
define bar =
foo
baz
endef
$(info foo: $(foo))
$(info bar: $(bar))
all:
这是运行它的输出:
$ make
foo: bar
baz
bar:
make: Nothing to be done for `all'.
这里发生了什么? GNU make 手册 似乎表明这两个变量声明应该是同样-我在这里缺少什么?
编辑:
我所指的手册中的一些引文:
定义立即数 推迟的 恩德夫 定义立即= 推迟的 恩德夫
5.8 定义罐装食谱< /strong>
以下是定义罐头食谱的示例:
定义 run-yacc = yacc $(第一个单词 $^) mv y.tab.c $@ 恩德夫
6.8 定义多行变量< /strong>
...如果您愿意,可以省略变量赋值运算符。如果省略,make 假定它是“=”并创建一个递归扩展变量...
如您所见,罐头食谱部分显式使用=
大小写。我正在使用 GNU Make 3.81。
I read this question, and I was surprised it wasn't working:
Why GNU Make canned recipe doesn't work?
So I tried it myself and got the same results. Here's an example makefile:
define foo
bar
baz
endef
define bar =
foo
baz
endef
$(info foo: $(foo))
$(info bar: $(bar))
all:
And here's the output from running it:
$ make
foo: bar
baz
bar:
make: Nothing to be done for `all'.
What's happening here? The GNU make manual seems to indicate that these two variable declarations should be the same - what am I missing here?
Edit:
Some quotations from the manual that I was referring to:
define immediate deferred endef define immediate = deferred endef
Here is an example of defining a canned recipe:
define run-yacc = yacc $(firstword $^) mv y.tab.c $@ endef
6.8 Defining Multi-Line Variables
... You may omit the variable assignment operator if you prefer. If omitted, make assumes it to be ‘=’ and creates a recursively-expanded variable...
As you can see, the canned recipes section explicitly uses the =
case. I'm using GNU Make 3.81.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
从 3.82 中的 CHANGELOG 来看:
似乎在 define 语句中不支持使用“=”
From the CHANGELOG in 3.82:
It seems like using '=' isn't supported prior to that in define statements
这可能是您的
make
版本。我在我的机器上使用 Cygwin 中的 make 3.81 测试了该 makefile 并得到:我使用 make 3.82(本机 Windows 构建)测试了相同的 makefile 并得到:
我相信在线
make
手册适用于 v3.82。It's probably your
make
version. I tested that makefile on my machine using make 3.81 in Cygwin and got:I tested the same makefile using make 3.82 (native Windows build) and got:
I believe the online
make
manual is for v3.82.