it-swarm.cn

从Makefile的变量中删除项目?

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

VAR := Something SomethingElse
VAR += SomeOtherThing

(...)

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

我正在使用GNU Make,和GNU使具体的解决方案没问题。

69
Bjarke Freund-Hansen

您可以使用 filter-out文本函数 如果您正在使用GNU Make。

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

除了上面的正确答案:

VAR = bla1 bla2 bla3 bla4 bla5

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

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

输出:
VAR是:bla1 bla2 bla4 bla5

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

5
Andreas Mikael Bank

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

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)"
0
sop