web-dev-qa-db-fra.com

Quelle est la différence entre: = et = dans Makefile?

Pour l'affectation des variables dans Make, je vois: = et = opérateur. Quelle est la différence entre eux?

74
prosseek

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.

59
Greg Hewgill

Affectation simple (: =)

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.

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é 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.

Affectation conditionnelle (? =)

L'affectation conditionnelle affecte une valeur à une variable uniquement si elle n'a pas de valeur

Ajout (+ =)

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

37
Amjad

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.

11
Oliver Charlesworth