¿Eliminar elemento de una variable Makefile?


Tengo un makefile, que incluye varios otros makefiles, que a su vez se suman a una variable como esta:

VAR := Something SomethingElse
VAR += SomeOtherThing

(...)

Ahora deseo eliminar SomethingElse de la variable VAR. ¿Qué pongo en lugar de (...) para hacer esto?

Estoy usando GNU Make, y una solución específica de GNU Make estará bien.

Author: jww, 2011-09-13

3 answers

Usted podría utilizar el filter-out función de texto si está utilizando GNU Make.

OTHERVAR := $(filter-out SomethingElse,$(VAR))
 84
Author: Mat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-04 09:13:59

Encima de la respuesta correcta arriba:

VAR = bla1 bla2 bla3 bla4 bla5

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

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

Salida:
VAR es: bla1 bla2 bla4 bla5

Tenga en cuenta que esto rompe toda la "recursividad" cuando se ejecuta filter-out, pero eso podría no importar en su caso.

 4
Author: Andreas Mikael Bank,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-12 08:06:13

Como también tengo una situación similar, quiero agregar una nueva respuesta. En mi caso también había comas en la cadena variable y, más, quería eliminar la coma y la última palabra :

VAR = "bla1, bla2"

En este caso filter out no funciona (ni siquiera en las respuestas anteriores, cuando no hay comillas)

Mi solución es usar 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
Author: sop,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-02 16:07:23