J'ai un makefile, qui comprend plusieurs autres makefiles, qui à leur tour s'ajoutent tous à une variable comme celle-ci:
VAR := Something SomethingElse
VAR += SomeOtherThing
(...)
Maintenant, je souhaite supprimer SomethingElse
de la variable VAR
. Que dois-je mettre à la place de (...)
pour faire ça?
J'utilise GNU Make, et une solution GNU Make) sera très bien.
Vous pouvez utiliser le filter-out
fonction texte si vous utilisez GNU Make.
OTHERVAR := $(filter-out SomethingElse,$(VAR))
En plus de la bonne réponse ci-dessus:
VAR = bla1 bla2 bla3 bla4 bla5
TMPVAR := $(VAR)
VAR = $(filter-out bla3, $(TMPVAR))
all:
@echo "VAR is: $(VAR)"
Sortie:
VAR est: bla1 bla2 bla4 bla5
Notez que cela rompt toute "récursivité" lorsque le filtrage est exécuté, mais cela peut ne pas avoir d'importance dans votre cas.
Comme j'ai également une situation similaire, je veux ajouter une nouvelle réponse. Dans mon cas, il y avait aussi des virgules dans la chaîne variable et, plus, je voulais supprimer la virgule et le dernier mot:
VAR = "bla1, bla2"
Dans ce cas, le filtrage ne fonctionne pas (même pas dans les réponses précédentes, quand il n'y a pas de guillemets)
Ma solution est d'utiliser 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)"