web-dev-qa-db-fra.com

Supprimer l'élément d'une variable Makefile?

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.

69

Vous pouvez utiliser le filter-out fonction texte si vous utilisez GNU Make.

OTHERVAR := $(filter-out SomethingElse,$(VAR))
96
Mat

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.

5

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)"
0
sop