Usunąć element ze zmiennej Makefile?

Mam plik makefile, który zawiera kilka innych plików Makefile, które z kolei wszystkie dodają do zmiennej takiej jak Ta:

VAR := Something SomethingElse
VAR += SomeOtherThing

(...)

Teraz chcę usunąć SomethingElse ze zmiennej VAR. Co mam wstawić w miejsce (...) aby to zrobić?

Używam GNU Make, A konkretne rozwiązanie GNU Make będzie w porządku.

Author: jww, 2011-09-13

3 answers

Możesz użyć filter-out funkcja tekstowa Jeśli używasz GNU Make.

OTHERVAR := $(filter-out SomethingElse,$(VAR))
 84
Author: Mat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-04 09:13:59

Na górze poprawnej odpowiedzi powyżej:

VAR = bla1 bla2 bla3 bla4 bla5

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

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

Wyjście:
VAR to: bla1 bla2 bla4 bla5

Zauważ, że to łamie całą "rekurencyjność" podczas wykonywania filtrowania, ale może to nie mieć znaczenia w Twoim przypadku.

 4
Author: Andreas Mikael Bank,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-12 08:06:13

Ponieważ również mam podobną sytuację, chcę dodać nową odpowiedź. W moim przypadku były też przecinki w łańcuchu zmiennej i, co więcej, chciałem usunąć przecinek i ostatnie słowo:

VAR = "bla1, bla2"

W tym przypadku filtrowanie nie działa (nawet w poprzednich odpowiedziach, gdy nie ma cudzysłowów)

Moim rozwiązaniem jest użycie 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
Author: sop,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-02 16:07:23