Para atribuição de variável em Make, vejo: operador = e =. Qual é a diferença entre eles?
makefile
gnu-make
colon-equals
prosseek
fonte
fonte
Respostas:
Isso é descrito na documentação do GNU Make, na seção intitulada 6.2 Os Dois Sabores das Variáveis .
Resumindo, as variáveis definidas com
:=
são expandidas uma vez, mas as variáveis definidas com=
são expandidas sempre que são usadas.fonte
make
tarefa principal do) tem uma sobrecarga muito maior do que a resolução de variável interna.Tarefa simples
:=
Uma expressão de atribuição simples é avaliada apenas uma vez, na primeira ocorrência. Por exemplo, se
CC :=${GCC} ${FLAGS}
durante o primeiro encontro for avaliado,gcc -W
então cada vez que${CC}
ocorrer, ele será substituído porgcc -W
.Atribuição recursiva
=
Uma expressão de atribuição recursiva é avaliada sempre que a variável é encontrada no código. Por exemplo, uma instrução like
CC = ${GCC} {FLAGS}
será avaliada apenas quando uma ação like${CC} file.c
for executada. No entanto, se a variávelGCC
for reatribuída, ou sejaGCC=c++
, o${CC}
será convertido parac++ -W
após a reatribuição.Atribuição condicional
?=
A atribuição condicional atribui um valor a uma variável apenas se ela não tiver um valor
Anexando
+=
Suponha que
CC = gcc
então o operador de acréscimo é usado comoCC += -w
então
CC
agora tem o valorgcc -W
Para mais informações, confira estes tutoriais
fonte
De http://www.gnu.org/software/make/manual/make.html#Flavors :
=
define uma variável expandida recursivamente.:=
define uma variável simplesmente expandida.fonte