Supprimer un élément d’une variable Makefile?

J’ai un fichier makefile, qui inclut plusieurs autres fichiers makefiles, qui à leur tour s’ajoutent à une variable comme celle-ci:

VAR := Something SomethingElse VAR += SomeOtherThing (...) 

Maintenant, je souhaite supprimer SomethingElse de la variable VAR . Qu’est-ce que je mets à la place de (...) pour faire ça?

J’utilise GNU Make et une solution spécifique à GNU Make conviendra.

Vous pouvez utiliser la fonction de texte de filter-out 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 aussi une situation similaire, je veux append une nouvelle réponse. Dans mon cas, il y avait aussi des virgules dans la chaîne de la variable et, plus encore, je voulais supprimer la virgule et le dernier mot:

 VAR = "bla1, bla2" 

Dans ce cas, le filtrage ne fonctionne pas (pas même 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)"