Pour l'affectation des variables dans Make, je vois: = et = opérateur. Quelle est la différence entre eux?
Ceci est décrit dans la documentation GNU Make, dans la section intitulée 6.2 Les deux saveurs des variables .
En bref, les variables définies avec :=
sont développés une fois, mais les variables définies avec =
sont développés chaque fois qu'ils sont utilisés.
Une expression d'affectation simple n'est évaluée qu'une seule fois, à la toute première occurrence. Par exemple, si CC :=${GCC} ${FLAGS}
lors de la première rencontre est évalué à gcc -W
puis à chaque fois ${CC}
se produit, il sera remplacé par gcc -W
.
Une expression d'affectation récursive est évaluée chaque fois que la variable est rencontrée dans le code. Par exemple, une instruction comme CC = ${GCC} {FLAGS}
ne sera évalué que lorsqu'une action comme ${CC} file.c
est exécuté. Cependant, si la variable GCC
est réaffectée, c'est-à-dire GCC=c++
puis le ${CC}
sera converti en c++ -W
après la réaffectation.
L'affectation conditionnelle affecte une valeur à une variable uniquement si elle n'a pas de valeur
Suppose que CC = gcc
alors l'opérateur d'ajout est utilisé comme CC += -w
puis CC
a maintenant la valeur gcc -W
Pour en savoir plus, consultez ces tutoriels
De http://www.gnu.org/software/make/manual/make.html#Flavors :
=
définit une variable récursivement développée. :=
définit une variable simplement développée.