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

lep*_*phe 6 makefile eval

我想使用makeeval函数在 a 中定义几个(动态命名的)变量foreach,但我无法eval完成这项工作。

我试过这样的事情:

$(eval \
    var1 = val1 \
    var2 = val2 \
)
Run Code Online (Sandbox Code Playgroud)

它不起作用:var1被定义为val1 var2 = val2var2未定义。这是有道理的,因为我放在\第二行的末尾。但是如果我删除它,eval呼叫将永远不会终止。

我尝试了不同的方法来让这个\只被 看到eval,但没有任何效果。因此问题是:是否可以在同一个eval调用中定义多个变量?

我当然可以打eval两次电话……这是相当好奇。

Tim*_*Tim 7

分隔每个变量定义的是换行符,您用反斜杠将其转义。由于您不能将它直接放在eval函数中,因此您必须定义它并eval像这样使用它:

define newline


endef
Run Code Online (Sandbox Code Playgroud)

然后,如果您将以下几行放在 target 中:

$(eval FOO=abc$(newline)BAR=def)
@echo FOO : $(FOO) BAR : $(BAR)
Run Code Online (Sandbox Code Playgroud)

你会得到这样的结果:

FOO : abc 酒吧 : def

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

$(eval FOO=abc$(newline)BAR=def$$(FOO))
@echo FOO : $(FOO) BAR : $(BAR)
Run Code Online (Sandbox Code Playgroud)

结果最终将是:

FOO : abc BAR : defabc

这是因为在eval实际开始工作之前有第一级解释(这里添加了换行符)但我们希望变量的解释仅在实际eval工作期间发生,当变量被定义时,这就是为什么我们需要一个双 $ 符号。