Pour l'affectation de variables dans Make, je vois: = et = opérateur. Quelle est la différence entre eux?
Pour l'affectation de variables dans Make, je vois: = et = opérateur. Quelle est la différence entre eux?
Réponses:
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ées une fois, mais les variables définies avec =
sont développées chaque fois qu'elles sont utilisées.
make
travail principal de la tâche) a une surcharge beaucoup plus importante qu'une telle résolution de variable interne.
:=
Une expression d'affectation simple est évaluée une seule fois, à la toute première occurrence. Par exemple, si CC :=${GCC} ${FLAGS}
lors de la première rencontre est évalué à gcc -W
alors chaque fois ${CC}
qu'il 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ée que lorsqu'une action comme ${CC} file.c
sera exécutée. Cependant, si la variable GCC
est réaffectée, c'est-à-dire que
GCC=c++
le ${CC}
sera converti c++ -W
après la réaffectation.
?=
L'affectation conditionnelle affecte une valeur à une variable uniquement si elle n'a pas de valeur
+=
Supposons CC = gcc
qu'alors l'opérateur d'ajout est utilisé comme CC += -w
alors a CC
maintenant la valeurgcc -W
Pour plus d'informations, consultez ces tutoriels
De http://www.gnu.org/software/make/manual/make.html#Flavors :
=
définit une variable étendue de manière récursive. :=
définit une variable simplement développée.