为什么 GNU 在 'patsubst' 函数中没有扩展词干'%'



我有以下制作文件:

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))是解决此问题的一种方法。

最新更新