make - 在同一个 eval 调用中定义多个变量
make - define multiple variables in the same eval call
我想使用 make
的 eval
函数在 foreach
中定义几个(动态命名的)变量,但我无法得到 eval
来完成这项工作。
我试过这样的事情:
$(eval \
var1 = val1 \
var2 = val2 \
)
它不起作用:var1
被定义为 val1 var2 = val2
而 var2
未定义。这是有道理的,因为我把 \
放在第二行的末尾。但如果我删除它,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
我想使用 make
的 eval
函数在 foreach
中定义几个(动态命名的)变量,但我无法得到 eval
来完成这项工作。
我试过这样的事情:
$(eval \
var1 = val1 \
var2 = val2 \
)
它不起作用:var1
被定义为 val1 var2 = val2
而 var2
未定义。这是有道理的,因为我把 \
放在第二行的末尾。但如果我删除它,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