2016-09-01 8 views
1

Versucht, den Weg des .so durch die Make-Datei in der unten genannten Weise zu exportierenLD_LIBRARY_PATH enthält keine Pfad exportiert

install-data-Uhr:

export LD_LIBRARY_PATH=$$LD_LIBRARY_PATH:'$(PWD)' 
    echo $$LD_LIBRARY_PATH 

aber wenn tun echo $ LD_LIBRARY_PATH ist noch leer. Bitte helfen Sie mir dabei, danke im Voraus

+0

Was ist mit den doppelten '$' Zeichen? – redneb

+1

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

+0

Aber immer noch ist leer. Gefolgt der gleichen Weise, wie in "Wie kann ich ENV-Variablen zwischen make Ziele übergeben" –

Antwort

3

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 
+0

Vielen Dank –