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.
maketarefa 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 -Wentã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.cfor executada. No entanto, se a variável GCCfor reatribuída, ou seja
GCC=c++, o ${CC}será convertido para c++ -Wapó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 = gccentão o operador de acréscimo é usado como CC += -w
então CCagora 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.