Простое назначение (: =)
Простое выражение присваивания вычисляется только один раз при самом первом появлении.
Например, если 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
Подробнее читайте в этих руководствах