我有一个makefile,其中包括其他几个makefile,它们又都添加到这样的变量中:
VAR := Something SomethingElse
VAR += SomeOtherThing
(...)
现在,我希望SomethingElse从VAR变量中删除。我(...)该怎么做呢?
我正在使用GNU Make,并且可以使用GNU Make特定的解决方案。
我有一个makefile,其中包括其他几个makefile,它们又都添加到这样的变量中:
VAR := Something SomethingElse
VAR += SomeOtherThing
(...)
现在,我希望SomethingElse从VAR变量中删除。我(...)该怎么做呢?
我正在使用GNU Make,并且可以使用GNU Make特定的解决方案。
Answers:
如果您使用的是GNU Make,则可以使用filter-outtext函数。
OTHERVAR := $(filter-out SomethingElse,$(VAR))
=我会得到一个makefile错误,该错误说明了有关VAR的最终最终以无限递归引用了它。(VAR = $(filter-out SomethingElse,$(VAR)))
VAR := $(filter-out SomethingElse,$(VAR)) 使用:=和不是=)。谢谢。:)
VAR := $(filter-out A B C,$(VAR))。
filter-out仅适用于空格分隔的单词。如果您需要从字符串中删除没有单词分隔的内容,可以使用subst代替filter-out。即:$(subst -world,,hello-world)将给出结果hello。
在上面的正确答案之上:
VAR = bla1 bla2 bla3 bla4 bla5
TMPVAR := $(VAR)
VAR = $(filter-out bla3, $(TMPVAR))
all:
@echo "VAR is: $(VAR)"
输出:
VAR是:bla1 bla2 bla4 bla5
请注意,这在执行滤出时会破坏所有的“递归”,但是在您的情况下可能无关紧要。
BLA1 = bla1,VAR = $(BLA1) bla2 bla3 bla4 bla5而不是上面的VAR定义。BLA1 += bla1111滤除后执行对VAR的值没有影响,因为它将丢失对$(BLA1)值的引用。
由于我也有类似情况,因此我想添加一个新答案。就我而言,变量字符串中也包含逗号,而且,我想删除逗号和最后一个单词:
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)"
=而不是:=?