L'utilisation =
entraîne l'attribution d'une valeur à la variable. Si la variable avait déjà une valeur, elle est remplacée. Cette valeur sera développée lors de son utilisation. Par exemple:
HELLO = world
HELLO_WORLD = $(HELLO) world!
# This echoes "world world!"
echo $(HELLO_WORLD)
HELLO = hello
# This echoes "hello world!"
echo $(HELLO_WORLD)
L'utilisation :=
est similaire à l'utilisation =
. Cependant, au lieu de développer la valeur lors de son utilisation, elle est développée lors de 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)
L'utilisation ?=
affecte à la variable une valeur si la variable n'a pas été précédemment affectée. Si la variable a été précédemment affectée d'une valeur vide ( VAR=
), elle est toujours considérée comme définie, je pense . Sinon, fonctionne exactement comme =
.
Utiliser, +=
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 :=
, elle est développée je pense . La valeur résultante est élargie 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 du genre HELLO_WORLD = $(HELLO_WORLD) world!
était utilisé, une récursivité en résulterait, ce qui mettrait très probablement fin à l'exécution de votre Makefile. Si elles A := $(A) $(B)
étaient utilisées, le résultat ne serait pas exactement le même que celui utilisé +=
car B
est développé avec :=
alors +=
qu'il ne provoquerait pas B
de développement.