在gnumake中使用多行定义中的变量

时间:2014-04-22 11:07:01

标签: gnu-make

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。

1 个答案:

答案 0 :(得分:2)

这是关于一起使用calleval的一个令人困惑的事情:何时添加额外的引用。问题是首先调用call函数,这将扩展参数一次。然后调用eval并评估参数(call的输出)。

在您的示例中,info函数正在由call进行第一次评估,因此在那种情况下a尚未设置(因为它尚未设置,直到eval函数运行)。所以你需要逃避这个功能,以及a

的扩展
define t1
a = $1
$$(info $$(a) -- $(1))
endef