为什么干'%' GNU Make不会在一个' patsubst'功能

时间:2016-07-12 20:59:00

标签: makefile gnu-make

我有以下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(当然不移动任何其他行) ?

1 个答案:

答案 0 :(得分:3)

%是一个完全有效的变量名称(尽管应该避免显而易见的原因),因此替换表达式$(FOO:%=$(%))只是用FOO中的每个标记替换变量的值{ {1}},为空 - 必须先展开%才能执行替换。

$(%)是解决此问题的一种方法。