2010-02-02 17 views
17

Estoy usando GNU make, e incluyendo una biblioteca de terceros en un proyecto que tiene un sistema de compilación que se vuelve loco si se define CFLAGS en el entorno cuando se llama. Me gusta tener CFLAGS definido en mi entorno por otros motivos. construcción de la biblioteca se invoca desde otro archivo MAKE, por lo que digo ej .:¿Es posible "desarmar" una variable de entorno en un Makefile?

3rdparty: $(MAKE) -f Makefile.3rdparty

pero me gustaría estar seguro de que CFLAGS no está definida cuando invoco a hacer en la tercera parte Makefile. Lo más cercano que puedo encontrar es decir:

CFLAGS:=

Pero esto todavía deja CFLAGS set en el medio ambiente, es sólo una cadena vacía. Aparte de hacer algo horrible como decir:

3rdparty: bash -c "unset CFLAGS; $(MAKE) -f Makefile.3rdparty"

¿Hay una manera fácil de "desarmar" la variable CFLAGS de dentro de mi makefile primaria, por lo que no está presente en absoluto en el ambiente cuando se invoca la biblioteca de terceros?

Respuesta

23

¿No funciona lo siguiente para usted?

unexport CFLAGS 
3rdparty: 
     $(MAKE) -f Makefile.3rdparty 
+0

lo hace! No sabía sobre la palabra clave "unexport", ahora lo hago. ¡Gracias! –

+1

@JayWalker, marque esta respuesta como la aceptada si está satisfecho. –

0

Esto puede ser problemático si necesita la variable que se define para otros comandos en la receta y sólo no quieren que se define en la submake. Otra solución es utilizar env - para invocar el submake y establece explícitamente cualquier variable de entorno que le basta con exponer en el submake, por ejemplo:

env - PATH="$$PATH" LD_LIBRARY_PATH="$$LD_LIBRARY_PATH" $(MAKE) -f Makefile.3rdparty 
-3

ha decidido eliminar una variable de entorno en Linux.

Uso:

export -n MY_ENV_VARIABLE 
0

partir de la versión 3.82 maquillaje tiene una "undefine" directiva:

undefine CFLAGS 
Cuestiones relacionadas