我有以下makefile:
A = a
B = b
FOO = A B
BAR = $(FOO:%=$(%))
C = c
FOO += C
all:
echo $(BAR)
我希望make
能够打印a b c
,但它并不是(词干'%'未展开或其他内容)。我尝试更改BAR
的分配:
$(eval BAR = $(FOO:%=$$(%)))
但它只打印a b
(因为它应该是因为eval
立即使用当前值FOO
执行替换。)
那么BAR
的定义有什么问题?如何更改它以便make
打印a b c
(当然不移动任何其他行) ?
答案 0 :(得分:3)
%
是一个完全有效的变量名称(尽管应该避免显而易见的原因),因此替换表达式$(FOO:%=$(%))
只是用FOO
中的每个标记替换变量的值{ {1}},为空 - 必须先展开%
才能执行替换。
$(%)
是解决此问题的一种方法。