Удалить элемент из переменной Make-файла?


у меня есть makefile, который включает в себя несколько других makefiles, которые в свою очередь все добавляют к переменной, как это:

VAR := Something SomethingElse
VAR += SomeOtherThing

(...)

теперь я хочу удалить SomethingElse С VAR переменной. Что я ставлю на место (...) для этого?

Я использую GNU Make, и GNU Make конкретное решение будет в порядке.

3 61

3 ответа:

вы могли бы использовать filter-out текст если вы используете GNU Make.

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

поверх правильного ответа выше:

VAR = bla1 bla2 bla3 bla4 bla5

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

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

выход:
VAR is: bla1 bla2 bla4 bla5

обратите внимание, что это нарушает всю "рекурсивность" при выполнении фильтрации, но это может не иметь значения в вашем случае.

поскольку у меня также есть аналогичная ситуация, я хочу добавить новый ответ. В моем случае также были запятые в строке переменной, и, более того, я хотел удалить запятую и последнее слово :

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