Удалить элемент из переменной Makefile? - PullRequest
69 голосов
/ 13 сентября 2011

У меня есть make-файл, который включает в себя несколько других make-файлов, которые, в свою очередь, все добавляют к такой переменной:

VAR := Something SomethingElse
VAR += SomeOtherThing

(...)

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

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

Ответы [ 3 ]

95 голосов
/ 13 сентября 2011

Вы можете использовать текстовую функцию filter-out , если используете GNU Make.

OTHERVAR := $(filter-out SomethingElse,$(VAR))
5 голосов
/ 12 октября 2016

Над правильным ответом выше:

VAR = bla1 bla2 bla3 bla4 bla5

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

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

Вывод:VAR: bla1 bla2 bla4 bla5

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

0 голосов
/ 02 марта 2018

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

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