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.
3 answers
Możesz użyć filter-out
funkcja tekstowa Jeśli używasz GNU Make.
OTHERVAR := $(filter-out SomethingElse,$(VAR))
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.
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)"
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