Come ottenere una variabile d'ambiente della shell in un makefile?


102

In shell quando entro

echo $demoPath

stampa

/usr/local/demo

Come posso ottenere il valore di questa variabile $demoPathin un makefile?

Risposte:


152

Se hai esportato la variabile d'ambiente:

export demoPath=/usr/local/demo

puoi semplicemente fare riferimento ad esso per nome nel makefile( makeimporta tutte le variabili d'ambiente che hai impostato):

DEMOPATH = ${demoPath}    # Or $(demoPath) if you prefer.

Se non hai esportato la variabile di ambiente, non è accessibile fino a quando non la esporti o a meno che non la passi esplicitamente sulla riga di comando:

make DEMOPATH="${demoPath}" 

Se stai usando una derivata della shell C, sostituisci setenv demoPath /usr/local/demoil exportcomando.


3
"make importa tutte le variabili d'ambiente che hai impostato". Funziona! Bello ~, non ne avevo idea prima, grazie mille.
Jialin

@jonathan_leffler Sono stato ispirato dalla tua risposta e ho fatto qualcosa di leggermente diverso. Ho impostato l'envvar prima di chiamare make senza esportare esso: demoPath=/usr/local/demo make. Potresti testarlo e magari aggiornare la tua risposta. Saluti!
AD

@AD Sì, questo è un altro meccanismo per impostare un valore per una variabile di ambiente per un comando specifico. È leggermente tangenziale alla domanda che chiede come accedere al valore di una variabile esistente, piuttosto che come crearne una al volo. Non smette di essere una tecnica utile a volte.
Jonathan Leffler

10

per chi vuole qualche documento ufficiale per confermare il comportamento

Le variabili in make possono provenire dall'ambiente in cui viene eseguito make. Ogni variabile d'ambiente che make vede quando si avvia viene trasformata in una variabile make con lo stesso nome e valore. Tuttavia, un'assegnazione esplicita nel makefile, o con un argomento di comando, sovrascrive l'ambiente. (Se viene specificato il flag "-e", i valori dell'ambiente sovrascrivono le assegnazioni nel makefile.

https://www.gnu.org/software/make/manual/html_node/Environment.html


6
all:
    echo ${PATH}

Oppure cambia PATH solo per un comando:

all:
    PATH=/my/path:${PATH} cmd
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.