Makefile 为什么是干的';%';在';patsubst';功能

Makefile 为什么是干的';%';在';patsubst';功能,makefile,gnu-make,Makefile,Gnu Make,我有以下生成文件: A = a B = b FOO = A B BAR = $(FOO:%=$(%)) C = c FOO += C all: echo $(BAR) 我希望make打印abc,但它没有打印(词干“%”未展开或其他内容)。我尝试更改条形图的分配: $(评估栏=$(FOO:%=$$(%)) 但是它只打印ab(这应该是因为eval立即使用FOO的当前值执行替换) 那么,BAR的定义有什么问题?我如何更改它,使make打印abc(当然,不移动任何其他行)?%是一个完全有效的

我有以下生成文件:

A = a
B = b
FOO = A B
BAR = $(FOO:%=$(%))
C = c
FOO += C

all:
    echo $(BAR)
我希望
make
打印
abc
,但它没有打印(词干“%”未展开或其他内容)。我尝试更改
条形图的分配

$(评估栏=$(FOO:%=$$(%))

但是它只打印
ab
(这应该是因为
eval
立即使用
FOO
的当前值执行替换)


那么,
BAR
的定义有什么问题?我如何更改它,使
make
打印
abc
(当然,不移动任何其他行)?

%
是一个完全有效的变量名(尽管出于明显的原因应该避免),因此替换表达式
$(FOO:%=$()
只需将
FOO
中的每个标记替换为变量
%
的值,该值为空-make必须先展开
$(%)
,然后才能执行替换

BAR=$(foreach v,$(FOO),$($v))
是解决这个问题的一种方法