Tengo un archivo MAKE, que incluye varios otros archivos MAKE, que a su vez se agregan a una variable como esta:
VAR := Something SomethingElse
VAR += SomeOtherThing
(...)
Ahora deseo eliminar SomethingElse
de la VAR
variable. ¿Qué pongo en lugar de (...)
hacer esto?
Estoy usando GNU Make, y una solución específica de GNU Make estará bien.
=
y no:=
?=
, obtengo un error de archivo MAKE que dice algo sobre VAR que eventualmente se refiere a sí mismo en una recursión infinita. (VAR = $(filter-out SomethingElse,$(VAR))
)VAR := $(filter-out SomethingElse,$(VAR))
(Con:=
y no=
). Gracias. :)VAR := $(filter-out A B C,$(VAR))
.filter-out
solo funciona con palabras separadas por espacios. Si necesita eliminar algo de una cadena que no esté separada por palabras, puede usar ensubst
lugar defilter-out
. Es decir:$(subst -world,,hello-world)
daría el resultadohello
.Encima de la respuesta correcta arriba:
Salida:
VAR es: bla1 bla2 bla4 bla5
Tenga en cuenta que esto rompe toda la "recursividad" cuando se ejecuta el filtrado, pero es posible que eso no importe en su caso.
fuente
BLA1 = bla1
, entonces, enVAR = $(BLA1) bla2 bla3 bla4 bla5
lugar de la definición VAR anterior. La ejecuciónBLA1 += bla1111
después del filtrado no tendrá ningún efecto sobre el valor de VAR, ya que habrá perdido su referencia al valor de $ (BLA1).Como también tengo una situación similar, quiero agregar una nueva respuesta. En mi caso, también había comas en la cadena de variables y, además, quería eliminar la coma y la última palabra:
En este caso, el filtrado no funciona (ni siquiera en las respuestas anteriores, cuando no hay comillas)
Mi solución es usar
subst
:fuente