GNU make:eval函数与直接将变量扩展到makefile之间有什么区别

时间:2019-05-19 14:27:36

标签: makefile eval

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手册中对此没有实质意义。

0 个答案:

没有答案