Für die Variablenzuweisung in Make sehe ich: = und = Operator. Was ist der Unterschied zwischen ihnen?
Für die Variablenzuweisung in Make sehe ich: = und = Operator. Was ist der Unterschied zwischen ihnen?
Antworten:
Dies wird in der Dokumentation zu GNU Make im Abschnitt 6.2 Die zwei Varianten von Variablen beschrieben .
Kurz gesagt, mit definierte Variablen :=werden einmal erweitert, aber mit definierte Variablen werden bei =jeder Verwendung erweitert.
make) einen viel größeren Overhead hat als das Auflösen solcher internen Variablen.
:=Ein einfacher Zuweisungsausdruck wird beim ersten Auftreten nur einmal ausgewertet. Wenn beispielsweise CC :=${GCC} ${FLAGS}während der ersten Begegnung ausgewertet wird, gcc -Wwird sie jedes Mal ${CC}durch ersetzt gcc -W.
=Ein rekursiver Zuweisungsausdruck wird jedes Mal ausgewertet, wenn die Variable im Code gefunden wird. Beispielsweise wird eine Anweisung wie CC = ${GCC} {FLAGS}nur ausgewertet, wenn eine Aktion wie ${CC} file.causgeführt wird. Wenn jedoch die Variablen GCCzugewiesen werden , das heißt
GCC=c++dann das ${CC}wird umgewandelt werden c++ -Wnach der Neuzuordnung.
?=Die bedingte Zuweisung weist einer Variablen nur dann einen Wert zu, wenn sie keinen Wert hat
+=Angenommen, CC = gccdann wird der anhängende Operator so verwendet, als hätte CC += -w
er CCjetzt den Wertgcc -W
Weitere Informationen finden Sie in diesen Tutorials
Von http://www.gnu.org/software/make/manual/make.html#Flavors :
=definiert eine rekursiv erweiterte Variable. :=definiert eine einfach erweiterte Variable.