我读了这个问题,很惊讶它没能运行:
所以我自己尝试了一下,并得到了相同的结果。这是一个示例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手册,这两个变量声明应该是相同的,我错过了什么吗?编辑:
以下是我参考的一些手册引用:
define immediate deferred endef define immediate = deferred endef
下面是定义罐头食谱的一个例子:
define run-yacc = yacc $(firstword $^) mv y.tab.c $@ endef
您可以省略变量赋值运算符。如果省略,则make认为它是“=”并创建递归展开的变量...
正如您所看到的,预定义配方部分明确使用了“=”。 我正在使用GNU Make 3.81。
apt-get upgrade ; apt-get install make
告诉我 v3.81 是最新版本,所以我越来越生气了...非常感谢! - j_random_hacker