Jede Zielanweisung in der Makefile
ist eine unabhängige Anweisung, die in einer Subshell ausgeführt wird. Nach der Ausführung startet make
eine neue Subshell, um die nächste Anweisung auszuführen.
make
startet einen untergeordneten Prozess, der diesen Befehl ausführt. Dieser Befehl wird ausgeführt und make
wird mit dem nächsten Befehl fortgesetzt.
echo $$LD_LIBRARY_PATH
make
startet einen untergeordneten Prozess um diesen Befehl auszuführen. Der vorherige Befehl wurde bereits ausgeführt. Der vorherige Befehl hat in seiner Umgebung LD_LIBRARY_PATH
gesetzt, aber das ist alte Geschichte. Dieser kindliche Prozess und seine Umgebung gingen in diesen großen kleinen Eimer am Himmel. Dieser neue Prozess weiß nichts darüber.
Sie müssen alles, was als eine Anweisung auszuführen, ein Shell-Mini-Skript:
export LD_LIBRARY_PATH=$$LD_LIBRARY_PATH:'$(PWD)'; echo $$LD_LIBRARY_PATH
Wenn Mini-Skripte sehr lange Shell zu schreiben, als ein einziges Kind-Prozess ausgeführt werden, indem make
können lange Linien Split mit Backslashes:
export LD_LIBRARY_PATH=$$LD_LIBRARY_PATH:'$(PWD)'; \
echo $$LD_LIBRARY_PATH
Was ist mit den doppelten '$' Zeichen? – redneb
Mögliches Duplikat von [Wie kann ich ENV-Variablen zwischen make-Zielen übergeben] (http://stackoverflow.com/questions/38927419/how-can-i-pass-env-variables-between-make-targets) – user657267
Aber immer noch ist leer. Gefolgt der gleichen Weise, wie in "Wie kann ich ENV-Variablen zwischen make Ziele übergeben" –