我有一个makefile,其中包含其他几个makefile,而这些makefile又添加到这样的变量中:
VAR := Something SomethingElse
VAR += SomeOtherThing
(...)
现在,我希望从SomethingElse
变量中删除VAR
。我应该用什么代替(...)
来做这件事?
我正在使用GNU Make,而GNU Make特定的解决方案也没问题。
答案 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)"