it-swarm.it

Rimuovere l'elemento da una variabile Makefile?

Ho un makefile, che include diversi altri makefile, che a loro volta si aggiungono a una variabile come questa:

VAR := Something SomethingElse
VAR += SomeOtherThing

(...)

Ora desidero rimuovere SomethingElse dalla variabile VAR. Cosa metto al posto di (...) per farlo?

Sto usando GNU Make e a GNU Make una soluzione specifica andrà bene.

69

È possibile utilizzare filter-out funzione testo se stai usando GNU Make.

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

Oltre alla risposta corretta sopra:

VAR = bla1 bla2 bla3 bla4 bla5

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

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

Produzione:
VAR è: bla1 bla2 bla4 bla5

Si noti che questo interrompe tutta la "ricorsività" quando viene eseguito il filtro-out, ma potrebbe non avere importanza nel tuo caso.

5

Dato che ho anche una situazione simile, voglio aggiungere una nuova risposta. Nel mio caso c'erano anche delle virgole nella stringa variabile e, inoltre, volevo rimuovere la virgola e l'ultima parola:

VAR = "bla1, bla2"

In questo caso il filtro non funziona (nemmeno nelle risposte precedenti, quando non ci sono virgolette)

La mia soluzione è usare 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