Для присвоения переменных в Make я вижу: = и = оператор. В чем разница между ними?
Для присвоения переменных в Make я вижу: = и = оператор. В чем разница между ними?
Ответы:
Это описано в документации GNU Make, в разделе 6.2. Две разновидности переменных .
Короче говоря, переменные, определенные с помощью :=, раскрываются один раз, но переменные, определенные с помощью =, расширяются всякий раз, когда они используются.
makeосновное задание) имеет гораздо большие накладные расходы, чем разрешение такой внутренней переменной.
:=Простое выражение присваивания оценивается только один раз, при самом первом появлении. Например, если CC :=${GCC} ${FLAGS}во время первого столкновения оценивается значение, gcc -Wто каждый раз, когда ${CC}оно происходит, оно будет заменяться на gcc -W.
=Выражение рекурсивного присваивания вычисляется каждый раз, когда переменная встречается в коде. Например, выражение like CC = ${GCC} {FLAGS}будет оцениваться только при выполнении действия like ${CC} file.c. Однако, если переменная GCCпереназначена, то есть GCC=c++после переназначения
она ${CC}будет преобразована c++ -Wв.
?=Условное присвоение присваивает значение переменной, только если она не имеет значения
+=Предположим, что CC = gccтогда используется оператор добавления, как CC += -w
тогда, CCтеперь он имеет значениеgcc -W
Для получения дополнительной информации ознакомьтесь с этими руководствами
Из http://www.gnu.org/software/make/manual/make.html#Flavors :
=определяет рекурсивно расширяемую переменную. :=определяет просто расширяемую переменную.