Wie erhalte ich eine Shell-Umgebungsvariable in einem Makefile?

102

In der Shell, wenn ich eintrete

echo $demoPath

es druckt

/usr/local/demo

Wie kann ich den Wert dieser Variablen $demoPathin einem Makefile abrufen?

Jialin
quelle

Antworten:

152

Wenn Sie die Umgebungsvariable exportiert haben:

export demoPath=/usr/local/demo

Sie können einfach namentlich darauf verweisen in makefile( makeimportiert alle von Ihnen festgelegten Umgebungsvariablen):

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

Wenn Sie die Umgebungsvariable nicht exportiert haben, können Sie erst darauf zugreifen, wenn Sie sie exportieren oder wenn Sie sie explizit in der Befehlszeile übergeben:

make DEMOPATH="${demoPath}" 

Wenn Sie eine C-Shell-Ableitung verwenden, ersetzen Sie setenv demoPath /usr/local/demoden exportBefehl.

Jonathan Leffler
quelle
3
"make importiert alle von Ihnen festgelegten Umgebungsvariablen". Es funktioniert! Schön ~, ich habe vorher keine Ahnung davon, vielen Dank.
Jialin
@ Jonathan_leffler Ich war von Ihrer Antwort inspiriert und habe etwas anderes gemacht. Ich habe die envvar vor dem Aufruf von make festgelegt, ohne sie zu exportieren : demoPath=/usr/local/demo make. Vielleicht möchten Sie es testen und Ihre Antwort aktualisieren. Prost!
AD
@AD Ja, dies ist ein weiterer Mechanismus zum Festlegen eines Werts für eine Umgebungsvariable für einen bestimmten Befehl. Es ist etwas tangential zu der Frage, wie auf den Wert einer vorhandenen Variablen zugegriffen werden soll, anstatt wie man eine Variable im laufenden Betrieb erstellt. Es hört nicht auf, dass es gelegentlich eine nützliche Technik ist.
Jonathan Leffler
10

für diejenigen, die ein offizielles Dokument wünschen, um das Verhalten zu bestätigen

Variablen in make können aus der Umgebung stammen, in der make ausgeführt wird. Jede Umgebungsvariable, die make beim Start sieht, wird in eine make-Variable mit demselben Namen und Wert umgewandelt. Eine explizite Zuweisung im Makefile oder mit einem Befehlsargument überschreibt jedoch die Umgebung. (Wenn das Flag '-e' angegeben ist, überschreiben Werte aus der Umgebung die Zuweisungen im Makefile.

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

Dyno Fu
quelle
6
all:
    echo ${PATH}

Oder ändern Sie PATH nur für einen Befehl:

all:
    PATH=/my/path:${PATH} cmd
g10guang
quelle