Für die Variablenzuweisung in Make sehe ich: = und = Operator. Was ist der Unterschied zwischen ihnen?
makefile
gnu-make
colon-equals
prosseek
quelle
quelle
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.quelle
make
) einen viel größeren Overhead hat als das Auflösen solcher internen Variablen.Einfache Zuordnung
:=
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 ersetztgcc -W
.Rekursive Zuordnung
=
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 VariablenGCC
zugewiesen werden , das heißtGCC=c++
dann das${CC}
wird umgewandelt werdenc++ -W
nach der Neuzuordnung.Bedingte Zuordnung
?=
Die bedingte Zuweisung weist einer Variablen nur dann einen Wert zu, wenn sie keinen Wert hat
Anhängen
+=
Angenommen,
CC = gcc
dann wird der anhängende Operator so verwendet, als hätteCC += -w
er
CC
jetzt den Wertgcc -W
Weitere Informationen finden Sie in diesen Tutorials
quelle
Von http://www.gnu.org/software/make/manual/make.html#Flavors :
=
definiert eine rekursiv erweiterte Variable.:=
definiert eine einfach erweiterte Variable.quelle