Подтвердить что ты не робот

Какая разница между: = и = в Makefile?

Для присвоения переменной в Make (или Microsoft nmake) я вижу: = и = оператор. Какая разница между ними?

4b9b3361

Ответ 1

Это описано в документации GNU Make в разделе под названием 6.2. Два аромата переменных.

Короче говоря, переменные, определенные с помощью :=, разворачиваются один раз, но переменные, определенные с помощью =, расширяются всякий раз, когда они используются.

Ответ 3

Простое назначение (: =)

Простое выражение присваивания оценивается только один раз, в самом первом случае. Например, если CC :=${GCC} ${FLAGS} во время первой встречи оценивается как gcc -W, тогда каждый раз ${CC} он заменяется на gcc -W.

Рекурсивное присваивание (=)

Рекурсивное присваивание присваивается каждый раз, когда встречается переменная в коде. Например, выражение типа CC = ${GCC} {FLAGS} будет оцениваться только тогда, когда  выполняется действие типа ${CC} file.c. Однако, если переменная GCC переназначена i.e GCC=c++, тогда ${CC} будет преобразован в c++ -W после переназначения.

Условное присвоение (? =)

Условное присваивание присваивает значение переменной только в том случае, если она не имеет значения

Добавление (+ =)

Предположим, что CC = gcc тогда оператор добавления используется как CC += -w
то CC теперь имеет значение gcc -W