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 -W
wird 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.c
ausgeführt wird. Wenn jedoch die Variablen GCC
zugewiesen werden , das heißt
GCC=c++
dann das ${CC}
wird umgewandelt werden c++ -W
nach der Neuzuordnung.
?=
Die bedingte Zuweisung weist einer Variablen nur dann einen Wert zu, wenn sie keinen Wert hat
+=
Angenommen, CC = gcc
dann wird der anhängende Operator so verwendet, als hätte CC += -w
er CC
jetzt 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.