Pour l'affectation de variables dans Make, je vois: = et = opérateur. Quelle est la différence entre eux?
makefile
gnu-make
colon-equals
prosseek
la source
la source
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.la source
make
travail principal de la tâche) a une surcharge beaucoup plus importante qu'une telle résolution de variable interne.Affectation simple
:=
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é pargcc -W
.Affectation récursive
=
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 variableGCC
est réaffectée, c'est-à-dire queGCC=c++
le${CC}
sera convertic++ -W
après la réaffectation.Affectation conditionnelle
?=
L'affectation conditionnelle affecte une valeur à une variable uniquement si elle n'a pas de valeur
Ajout
+=
Supposons
CC = gcc
qu'alors l'opérateur d'ajout est utilisé commeCC += -w
alors a
CC
maintenant la valeurgcc -W
Pour plus d'informations, consultez ces tutoriels
la source
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.la source