Utilisation de =
fait en sorte qu'une valeur soit attribuée à la variable. Si la variable avait déjà une valeur, celle-ci est remplacée. Cette valeur sera développée lorsqu'elle sera utilisée. Par exemple :
HELLO = world
HELLO_WORLD = $(HELLO) world!
# This echoes "world world!"
echo $(HELLO_WORLD)
HELLO = hello
# This echoes "hello world!"
echo $(HELLO_WORLD)
Utilisation de :=
est similaire à l'utilisation de =
. Cependant, au lieu que la valeur soit développée lorsqu'elle est utilisée, elle est développée pendant l'affectation. Par exemple :
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)
Utilisation de ?=
attribue une valeur à la variable si la variable n'a pas été précédemment assignée. Si la variable a été précédemment assignée à une valeur vide ( VAR=
), il est toujours considéré comme un ensemble Je pense . Sinon, des fonctions exactement comme =
.
Utilisation de +=
c'est comme utiliser =
mais au lieu de remplacer la valeur, la valeur est ajoutée à la valeur actuelle, avec un espace entre les deux. Si la variable a été précédemment définie avec :=
il est étendu Je pense . La valeur résultante est étendue lorsqu'elle est utilisée Je pense . Par exemple :
HELLO_WORLD = hello
HELLO_WORLD += world!
# This echoes "hello world!"
echo $(HELLO_WORLD)
Si quelque chose comme HELLO_WORLD = $(HELLO_WORLD) world!
était utilisé, une récursion en résulterait, ce qui mettrait très probablement fin à l'exécution de votre Makefile. Si A := $(A) $(B)
était utilisé, le résultat ne serait pas exactement le même qu'en utilisant +=
parce que B
est élargi avec :=
alors que +=
ne causerait pas B
à développer.