web-dev-qa-db-ja.com

Makefile変数からアイテムを削除しますか?

Makefileには、他のいくつかのMakefileが含まれており、これらはすべて次のような変数に追加されます。

VAR := Something SomethingElse
VAR += SomeOtherThing

(...)

ここで、SomethingElse変数からVARを削除したいと思います。これを行うには、(...)の代わりに何を入れますか?

私はGNU Make、およびGNU Make特定のソリューションで問題ありません。

69

filter-outテキスト関数 GNU Makeを使用している場合。

OTHERVAR := $(filter-out SomethingElse,$(VAR))
96
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

私も同様の状況にあるので、新しい答えを追加したいと思います。私の場合、変数文字列にコンマもあり、さらに、コンマと最後のWordを削除したかった:

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