从Makefile变量中删除项目?

时间:2011-09-13 12:55:49

标签: variables makefile gnu-make

我有一个makefile,其中包含其他几个makefile,而这些makefile又添加到这样的变量中:

VAR := Something SomethingElse
VAR += SomeOtherThing

(...)

现在,我希望从SomethingElse变量中删除VAR。我应该用什么代替(...)来做这件事?

我正在使用GNU Make,而GNU Make特定的解决方案也没问题。

3 个答案:

答案 0 :(得分:95)

如果您使用的是GNU Make,则可以使用filter-out text function

OTHERVAR := $(filter-out SomethingElse,$(VAR))

答案 1 :(得分:5)

除了上面的正确答案:

VAR = bla1 bla2 bla3 bla4 bla5

TMPVAR := $(VAR)
VAR = $(filter-out bla3, $(TMPVAR))

all:
    @echo "VAR is: $(VAR)"

输出:
VAR是:bla1 bla2 bla4 bla5

请注意,这会在执行过滤时中断所有“递归”,但在您的情况下这可能无关紧要。

答案 2 :(得分:0)

由于我也有类似的情况,我想添加一个新答案。在我的情况下,变量字符串中也有逗号,更多的是,我想删除逗号和最后一个字:

VAR = "bla1, bla2"

在这种情况下,过滤掉不起作用(当没有引号时,甚至不在之前的答案中)

我的解决方案是使用subst

VAR = "bla1, bla2"

TTT = , bla2
TMPVAR := $(VAR)
SUBST = $(subst $(TTT),, $(TMPVAR))
FILT = $(filter-out $(TTT), $(TMPVAR))

subst:
    @echo "subst : $(SUBST)"

filter:
    @echo "filter-out : $(FILT)"