Car*_*rum 26 variables makefile
我读了这个问题,我很惊讶它不起作用:
所以我自己尝试了,并得到了相同的结果.这是一个示例makefile:
define foo
bar
baz
endef
define bar =
foo
baz
endef
$(info foo: $(foo))
$(info bar: $(bar))
all:
Run Code Online (Sandbox Code Playgroud)
这是运行它的输出:
$ make
foo: bar
baz
bar:
make: Nothing to be done for `all'.
Run Code Online (Sandbox Code Playgroud)
这里发生了什么事?在GNU进行手动似乎表明,这两个变量的声明应该是一样的-我错过什么吗?
编辑:
我所指的手册中的一些引用:
Run Code Online (Sandbox Code Playgroud)define immediate deferred endef define immediate = deferred endef以下是定义罐装食谱的示例:
Run Code Online (Sandbox Code Playgroud)define run-yacc = yacc $(firstword $^) mv y.tab.c $@ endef...如果您愿意,可以省略变量赋值运算符.如果省略,make假定它为'='并创建递归扩展变量...
如您所见,罐装食谱部分明确使用了该=案例.我正在使用GNU Make 3.81.
Tim*_*imm 30
来自3.82的CHANGELOG:
* read.c (do_define): Modify to allow assignment tokens (=, :=, etc.)
after a define, to create variables with those flavors.
Run Code Online (Sandbox Code Playgroud)
似乎在define语句之前不支持使用'='
bta*_*bta 18
这可能是你的make版本.我在Cygwin中使用make 3.81在我的机器上测试了makefile并得到:
$ make
foo: bar
baz
bar:
make: Nothing to be done for `all'.
Run Code Online (Sandbox Code Playgroud)
我使用make 3.82(本机Windows版本)测试了相同的makefile并获得:
C:\>C:\make\make.exe
foo: bar
baz
bar: foo
baz
make: Nothing to be done for `all'.
Run Code Online (Sandbox Code Playgroud)
我相信在线make手册适用于v3.82.