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

make - define multiple variables in the same eval call

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

我试过这样的事情:

$(eval \
    var1 = val1 \
    var2 = val2 \
)

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

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

当然我可以调用 eval 两次...这很好奇。

分隔每个变量定义的是换行符,您用反斜杠将其转义。因为你不能直接把它放在 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 工作期间,当定义变量时,这就是我们需要双 $ 符号的原因。

只需使用 foreach:

oneline = FOO=abc BAR=def XX=...
$(foreach line,$(oneline),$(eval $(line)))
$(info $(FOO) $(BAR))

结果:

abc def