我想使用make
的{{1}}函数在eval
中定义几个(动态命名的)变量,但我无法获得foreach
做这个工作。
我试过这样的事情:
eval
不起作用:$(eval \
var1 = val1 \
var2 = val2 \
)
定义为var1
,val1 var2 = val2
未定义。这是有道理的,因为我把var2
放在第二行的末尾。但如果我删除它,\
通话永远不会被终止。
我尝试了eval
只有\
看到的eval
不同的东西,但没有做到这一点。因此,问题是:是否可以在同一个eval
调用中定义多个变量?
当然,我可以两次致电eval
......这是相当好奇的。
答案 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
工作,当定义变量时,这就是我们需要双$符号的原因。