Durch Verwenden =
wird der Variablen ein Wert zugewiesen. Wenn die Variable bereits einen Wert hatte, wird sie ersetzt. Dieser Wert wird erweitert, wenn er verwendet wird. Zum Beispiel:
HELLO = world
HELLO_WORLD = $(HELLO) world!
# This echoes "world world!"
echo $(HELLO_WORLD)
HELLO = hello
# This echoes "hello world!"
echo $(HELLO_WORLD)
Die Verwendung :=
ähnelt der Verwendung =
. Anstatt den Wert zu erweitern, wenn er verwendet wird, wird er jedoch während der Zuweisung erweitert. Zum Beispiel:
HELLO = world
HELLO_WORLD := $(HELLO) world!
# This echoes "world world!"
echo $(HELLO_WORLD)
HELLO = hello
# Still echoes "world world!"
echo $(HELLO_WORLD)
HELLO_WORLD := $(HELLO) world!
# This echoes "hello world!"
echo $(HELLO_WORLD)
Mit ?=
weist der Variablen einen Wert zu, wenn die Variable zuvor nicht zugewiesen wurde. Wenn der Variablen zuvor ein leerer Wert ( VAR=
) zugewiesen wurde , wird er meiner Meinung nach immer noch als gesetzt betrachtet . Ansonsten funktioniert genau so =
.
Verwenden +=
ist wie Verwenden =
, aber anstatt den Wert zu ersetzen, wird der Wert mit einem Leerzeichen dazwischen an den aktuellen Wert angehängt. Wenn die Variable zuvor mit gesetzt wurde :=
, wird sie meiner Meinung nach erweitert . Der resultierende Wert wird erweitert, wenn er verwendet wird, denke ich . Zum Beispiel:
HELLO_WORLD = hello
HELLO_WORLD += world!
# This echoes "hello world!"
echo $(HELLO_WORLD)
Wenn so etwas HELLO_WORLD = $(HELLO_WORLD) world!
verwendet würde, würde sich eine Rekursion ergeben, die höchstwahrscheinlich die Ausführung Ihres Makefiles beenden würde. Wenn A := $(A) $(B)
verwendet würde, wäre das Ergebnis nicht genau das gleiche wie bei Verwendung, +=
da B
es mit erweitert wird, :=
während +=
es nicht B
zu einer Erweiterung führen würde.