В чем разница между:= и = в Makefile?
для присвоения переменной в Make (или Microsoft nmake), я вижу := и = оператор. Какая между ними разница?
3 ответа:
это описано в документации GNU Make, в разделе под названием 6.2 два вида переменных .
короче говоря, переменные, определенные с помощью
:=
расширяются один раз, но переменные определяются с помощью=
расширяются всякий раз, когда они используются.
простое присваивание (:=)
простое выражение присваивания вычисляется только один раз, при первом наступлении. Например, если
CC :=${GCC} ${FLAGS}
во время первой встречи оценивается вgcc -W
затем каждый раз${CC}
происходит он будет заменен наgcc -W
.рекурсивные присваивания(=)
рекурсивное выражение присваивания вычисляется каждый раз, когда переменная встречается в коде. Например, оператор типа
CC = ${GCC} {FLAGS}
будет оценивается только тогда, когда такое действие, как${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:
=
определяет рекурсивно расширенную переменную.:=
определяет просто расширенную переменную.