从Makefile变量中删除项目?

Bja*_*sen 71 variables makefile gnu-make

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

VAR := Something SomethingElse
VAR += SomeOtherThing

(...)
Run Code Online (Sandbox Code Playgroud)

现在我希望SomethingElseVAR变量中删除.我该怎么做(...)才能做到这一点?

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

Mat*_*Mat 98

如果你正在使用GNU Make,你可以使用filter-out文本功能.

OTHERVAR := $(filter-out SomethingElse,$(VAR))
Run Code Online (Sandbox Code Playgroud)

  • 注意:也可用于多个项目.例如:`VAR:= $(过滤掉ABC,$(VAR))`. (9认同)
  • 总结一下,原因取决于使用情况.但在我的例子中,正确的答案是:`VAR:= $(filter-out SomethingElse,$(VAR))`(使用`:=`而不是`=`).谢谢.:) (4认同)
  • 请注意其他人。“filter-out”仅适用于空格分隔的单词。如果您需要从未按单词分隔的字符串中删除某些内容,您可以使用“subst”而不是“filter-out”。即:“$(subst -world,,hello-world)”将给出结果“hello”。 (3认同)

小智 5

在上面的正确答案之上:

VAR = bla1 bla2 bla3 bla4 bla5

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

all:
    @echo "VAR is: $(VAR)"
Run Code Online (Sandbox Code Playgroud)

输出:
VAR是:bla1 bla2 bla4 bla5

请注意,这在执行滤出时会破坏所有的“递归”,但是在您的情况下可能并不重要。