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.
maketravail 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 -Walors 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.csera exécutée. Cependant, si la variable GCCest réaffectée, c'est-à-dire que
GCC=c++le ${CC}sera converti c++ -Waprès la réaffectation.
?=L'affectation conditionnelle affecte une valeur à une variable uniquement si elle n'a pas de valeur
+=Supposons CC = gccqu'alors l'opérateur d'ajout est utilisé comme CC += -w
alors a CCmaintenant 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.