Для присвоения переменной в Make (или Microsoft nmake) я вижу: = и = оператор. Какая разница между ними?
Какая разница между: = и = в Makefile?
Ответ 1
Это описано в документации GNU Make в разделе под названием 6.2. Два аромата переменных.
Короче говоря, переменные, определенные с помощью :=, разворачиваются один раз, но переменные, определенные с помощью =, расширяются всякий раз, когда они используются.
Ответ 2
Из http://www.gnu.org/software/make/manual/make.html#Flavors:
 = определяет рекурсивно расширенную переменную. := определяет просто расширенную переменную.
Ответ 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