У меня есть Make-файл для программы C, которая имеет объявление
CC?=gcc
Изменение его к
CC?=g++
НЕ заставляет его скомпилировать с g ++. Изменение его к
CC=g++
ДЕЙСТВИТЕЛЬНО заставляет его использовать g ++.
Так интересно что? = оператор делает? Мое предположение - то, что это смотрит на переменную среды для решения, какой компилятор использовать и если это не установлено затем использование gcc? Кто-либо, кто может разрешить это?
Из http://www.gnu.org/software/make/manual/make.html :
Есть еще один оператор присваивания для переменных - `? = '. Это называется условное присвоение переменной оператор, потому что он имеет только эффект, если переменная еще не определенный. Это утверждение:
FOO? = Bar
в точности эквивалентно этому (см. origin Функция):
ifeq ($ (origin FOO), undefined) FOO = бар endif
Вероятно, CC
уже определен как gcc
, поэтому CC? = G ++
не переопределит существующий gcc
.
Знак "?" оператор означает установлен, если еще не установлен.
Итак, если CC уже пуст, CC? = Установит его. Если CC уже что-то содержит, этого не будет.
Источник: http://unix.derkeiler.com/Mailing-Lists/FreeBSD/questions/2007-03/msg02057.html
Оператор ? =
устанавливает переменную, только если она еще не установлена: info make
→ * Использование переменных
→ * Настройка
.