2010-02-02 10 views
17

Sto usando GNU make e includo una libreria di terze parti in un progetto che ha un sistema di build che impazzisce se CFLAGS viene definito nell'ambiente quando viene chiamato. Mi piace avere CFLAGS definito nel mio ambiente per altri motivi. costruzione della biblioteca sia invocata da un altro makefile, in modo che io dico ad es .:È possibile "disinserire" una variabile d'ambiente in un Makefile?

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

ma vorrei essere sicuro che CFLAGS è impostata quando invoco rendere al 3 ° partito Makefile. La cosa più vicina che posso trovare è dire:

CFLAGS:=

Ma questo lascia ancora CFLAGS set nell'ambiente, è solo una stringa vuota. Oltre dal fare qualcosa di orribile come dire:

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

C'è un modo semplice per "unset" il CFLAGS variabile da dentro il mio makefile primaria, in modo che esso non è presente affatto nel ambiente quando viene richiamata la libreria di terze parti?

risposta

23

Non funziona il seguente lavoro?

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

lo fa! Non conoscevo la parola chiave "unexport", ora lo so. Grazie! –

+1

@ JayWalker, contrassegnare questa risposta come accettata se si è soddisfatti. –

0

Questo può essere problematico se è necessario la variabile da definire per altri comandi della ricetta e solo non lo vogliono definito nel submake. Un'altra soluzione è quella di utilizzare ENV - per richiamare il submake e impostata in modo esplicito le variabili di ambiente che è sufficiente impostare nel submake, ad esempio:

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

di disinserire una variabile di ambiente in linux.

Usa:

export -n MY_ENV_VARIABLE 
0

A partire dalla versione 3.82 marca ha un "undefine" direttiva:

undefine CFLAGS 
Problemi correlati