make - 在同一eval调用中定义多个变量

时间:2016-07-06 12:32:25

标签: makefile eval

我想使用make的{​​{1}}函数在eval中定义几个(动态命名的)变量,但我无法获得foreach做这个工作。

我试过这样的事情:

eval

不起作用:$(eval \ var1 = val1 \ var2 = val2 \ ) 定义为var1val1 var2 = val2未定义。这是有道理的,因为我把var2放在第二行的末尾。但如果我删除它,\通话永远不会被终止。

我尝试了eval只有\看到的eval不同的东西,但没有做到这一点。因此,问题是:是否可以在同一个eval调用中定义多个变量?

当然,我可以两次致电eval ......这是相当好奇的。

1 个答案:

答案 0 :(得分:2)

每个变量定义的区别在于换行符,您使用反斜杠进行转义。由于您无法直接将其放在eval函数中,因此您必须对其进行定义并将其用于eval,如下所示:

define newline


endef

然后,如果您将以下行放在目标中:

$(eval FOO=abc$(newline)BAR=def)
@echo FOO : $(FOO) BAR : $(BAR)

您将得到以下结果:

  

FOO:abc BAR:def

注意,如果你想在第二个的定义中使用一个变量,你必须像这样转义$字符:

$(eval FOO=abc$(newline)BAR=def$$(FOO))
@echo FOO : $(FOO) BAR : $(BAR)

结果最终将是:

  

FOO:abc BAR:defabc

这是因为在eval实际开始工作之前存在第一级解释(此处添加了换行符),但我们希望变量的解释仅在真正的eval工作,当定义变量时,这就是我们需要双$符号的原因。