2010-02-02 16 views
17

Ich benutze GNU make, und einschließlich einer 3rd-Party-Bibliothek in einem Projekt, das ein Build-System hat, das berserk geht, wenn CFLAGS in der Umgebung definiert ist, wenn es aufgerufen wird. Ich möchte CFLAGS aus anderen Gründen in meiner Umgebung definiert haben. Die Build-Bibliothek wird von einem anderen Make-Datei aufgerufen wird, so dass ich beispiels sagen .:Ist es möglich, eine Umgebungsvariable in einem Makefile "zu deaktivieren"?

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

Aber ich möchte sicher sein, dass CFLAGS ungesetzt ist, wenn ich auf der 3rd-Party-Makefile aufrufen machen. Die nächste Sache, die ich finden kann, ist zu sagen:

CFLAGS:=

Aber das läßt noch CFLAGS Satz in der Umgebung, es ist nur eine leere Zeichenfolge. Neben etwas zu tun, scheußlich wie wenn man sagt:

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

Gibt es eine einfache Art und Weise zu „entschärft“ die CFLAGS Variable aus meiner primären Make-Datei, so dass es nicht vorhanden ist, überhaupt in dem Umgebung, wenn die Third-Party-Bibliothek aufgerufen wird?

Antwort

23

Funktioniert das Folgende nicht für Sie?

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

Es tut! Ich wusste nichts über das Keyword "unexport", jetzt tue ich es. Vielen Dank! –

+1

@JayWalker, bitte markieren Sie diese Antwort als akzeptiert, wenn Sie zufrieden sind. –

0

Dies kann problematisch sein, wenn Sie die Variable benötigen für andere Befehle in der Rezeptur festgelegt werden und es nur nicht wollen, in der submake definiert. Eine andere Lösung ist env zu verwenden - die submake aufzurufen und ausdrücklich alle Umgebungsvariablen setzen Sie im submake setzen müssen, zB:

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

Um eine Umgebungsvariable in Linux nicht gesetzt.

Verwendung:

export -n MY_ENV_VARIABLE 
0

Ab Version 3.82 make hat eine "undefine" Richtlinie:

undefine CFLAGS 
Verwandte Themen