2010-02-02 8 views
17

J'utilise GNU make et j'inclue une bibliothèque tierce dans un projet qui a un système de construction qui devient berserk si CFLAGS est défini dans l'environnement quand il est appelé. J'aime avoir CFLAGS défini dans mon environnement pour d'autres raisons. est invoqué la construction de la bibliothèque d'un autre makefile, de sorte que je dis par exemple .:Est-il possible de "désactiver" une variable d'environnement dans un Makefile?

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

mais je voudrais être sûr que CFLAGS est unset quand j'invoque faire le Makefile 3ème partie. La chose la plus proche que je peux trouver est-à-dire:

CFLAGS:=

Mais cela laisse encore CFLAGS ensemble dans l'environnement, il est juste une chaîne vide. En dehors de faire quelque chose de hideux comme dire:

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

est-il un moyen facile de « unset » la variable CFLAGS à partir de mon makefile primaire, de sorte qu'il ne soit pas présent du tout dans le environnement lorsque la bibliothèque tierce est appelée?

Répondre

23

Est-ce que ce qui suit ne vous convient pas?

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

Il fait! Je ne savais pas sur le mot-clé "unexport", maintenant je le fais. Merci! –

+1

@JayWalker, veuillez marquer cette réponse comme la réponse acceptée si vous êtes satisfait. –

0

Cela peut être problématique si vous avez besoin de la variable à définir pour d'autres commandes dans la recette et seulement ne veulent pas défini dans le submake. Une autre solution consiste à utiliser env - pour appeler la submake et définir explicitement toutes les variables d'environnement dont vous avez besoin définies dans la submake, par exemple:

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

Pour UNSET une variable d'environnement sous Linux.

Utilisation:

export -n MY_ENV_VARIABLE 
0

de la version 3.82 make a une directive "undefine":

undefine CFLAGS