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 Bes mit erweitert wird, :=während +=es nicht Bzu einer Erweiterung führen würde.