我有以下制作文件:
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
(当然,不移动任何其他行)?
%
是一个完全有效的变量名(尽管出于明显的原因应该避免),因此替换表达式$(FOO:%=$(%))
简单地将 FOO
中的每个标记替换为变量 %
的值,该值为空 - make 必须先展开$(%)
,然后才能执行替换。
BAR = $(foreach v,$(FOO),$($v))
是解决此问题的一种方法。