Makefile定义一个多行变量,该变量定义一个规则,通过eval函数正常引用它:
define a
b:
echo b
endef
$(eval $(a))
出色的结果:
$ make
echo b
b
但直接引用变量失败:
define a :=
b:
echo b
endef
$(a)
执行make将失败:
make:***没有规则来使目标“ echo”被“ b”所需要。停止。
但是如果我将规则写成一行,那将起作用:
define a :=
b: ; echo b
endef
$(a)
make没问题:
$ make
echo b
b
为什么多行变量需要eval函数,当直接将变量扩展到makefile中时,GNU会做什么。
我发现在整个GNU make手册中对此没有实质意义。