Para atribuição de variável em Make, vejo: operador = e =. Qual é a diferença entre eles?
Para atribuição de variável em Make, vejo: operador = e =. Qual é a diferença entre eles?
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.
make
tarefa principal do) tem uma sobrecarga muito maior do que a resolução de variável interna.
:=
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 por gcc -W
.
=
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ável GCC
for reatribuída, ou seja
GCC=c++
, o ${CC}
será convertido para c++ -W
após a reatribuição.
?=
A atribuição condicional atribui um valor a uma variável apenas se ela não tiver um valor
+=
Suponha que CC = gcc
então o operador de acréscimo é usado como CC += -w
então CC
agora tem o valorgcc -W
Para mais informações, confira estes tutoriais
De http://www.gnu.org/software/make/manual/make.html#Flavors :
=
define uma variável expandida recursivamente. :=
define uma variável simplesmente expandida.