Makefile:
define t1
a = $1
$(info $(a) -- $(1))
endef
list = x y z
$(foreach v,$(list),$(eval $(call t1,$(v))))
输出
-- x
x -- y
y -- z
问题在于延迟了' a'通过一次调用。即使a := $1
也显示相同的问题。
有任何快速解决方法吗?
这是gnu make 3.81。
答案 0 :(得分:2)
这是关于一起使用call
和eval
的一个令人困惑的事情:何时添加额外的引用。问题是首先调用call
函数,这将扩展参数一次。然后调用eval
并评估其参数(call
的输出)。
在您的示例中,info
函数正在由call
进行第一次评估,因此在那种情况下a
尚未设置(因为它尚未设置,直到eval
函数运行)。所以你需要逃避这个功能,以及a
:
define t1
a = $1
$$(info $$(a) -- $(1))
endef