【发布时间】:2011-06-29 07:47:11
【问题描述】:
我读了这个问题,很惊讶它不起作用:
Why GNU Make canned recipe doesn't work?
所以我自己尝试了一下,得到了同样的结果。这是一个示例生成文件:
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 manual 似乎表明这两个变量声明应该相同 - 我在这里缺少什么?
编辑:
我所指的手册中的一些引文:
define immediate deferred endef define immediate = deferred endef以下是定义罐头食谱的示例:
define run-yacc = yacc $(firstword $^) mv y.tab.c $@ endef6.8 Defining Multi-Line Variables
... 如果您愿意,可以省略变量赋值运算符。如果省略,make 假定它是“=”并创建一个递归扩展变量...
如您所见,罐头食谱部分明确使用= 案例。我正在使用 GNU Make 3.81。
【问题讨论】:
-
刚刚遇到了同样的问题,
apt-get upgrade ; apt-get install make告诉我 v3.81 是最新的,所以我变得越来越愤怒......非常感谢!