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