我对以下makefile有疑问。我使用GNU Make v4.1。
define code
foo:=hello
bar:=${foo}
endef
$(eval ${code})
default:
#${foo}
#${bar}
${foo}
回应hello
,但${bar}
没有回应。为什么会这样?
我希望${bar}
也能回显hello
,因为我认为这相当于以下makefile:
foo:=hello
bar:=${foo}
default:
#${foo}
#${bar}
答案 0 :(得分:1)
我是原创海报。我发现了另一个功能'价值'哪个返回值没有扩展。
define code
foo:=hello
bar:=${foo}
endef
$(eval $(value code))
default:
#${foo}
#${bar}
这也有效。
答案 1 :(得分:0)
添加$(info ${code})
以查看正在进行的操作。
${foo}
的定义时, code
被扩展,因此code
包含
foo:=hello
bar:=${foo}
如果您希望在运行${foo}
时展开$(eval ${code})
,这是eval
有用的原因,那么您需要使code
的值包含1美元登录。
define code
foo:=hello
bar:=$${foo}
endef
在这种情况下,通过使bar
成为后期扩展定义,您可以获得相同的结果:
bar=${foo}
foo:=hello
default:
#${foo}
#${bar}
eval
在更复杂的情况下很有用,尤其是当动态构建字符串eval时。