Что делает CC? = в среднем Make-файле?

У меня есть Make-файл для программы C, которая имеет объявление

CC?=gcc

Изменение его к

CC?=g++

НЕ заставляет его скомпилировать с g ++. Изменение его к

CC=g++

ДЕЙСТВИТЕЛЬНО заставляет его использовать g ++.

Так интересно что? = оператор делает? Мое предположение - то, что это смотрит на переменную среды для решения, какой компилятор использовать и если это не установлено затем использование gcc? Кто-либо, кто может разрешить это?

26
задан inquam 3 June 2010 в 12:23
поделиться

3 ответа

Из http://www.gnu.org/software/make/manual/make.html :

Есть еще один оператор присваивания для переменных - `? = '. Это называется условное присвоение переменной оператор, потому что он имеет только эффект, если переменная еще не определенный. Это утверждение:

  FOO? = Bar

в точности эквивалентно этому (см. origin Функция):

  ifeq ($ (origin FOO), undefined)
FOO = бар
endif

Вероятно, CC уже определен как gcc , поэтому CC? = G ++ не переопределит существующий gcc .

34
ответ дан 28 November 2019 в 07:22
поделиться

Знак "?" оператор означает установлен, если еще не установлен.

Итак, если CC уже пуст, CC? = Установит его. Если CC уже что-то содержит, этого не будет.

Источник: http://unix.derkeiler.com/Mailing-Lists/FreeBSD/questions/2007-03/msg02057.html

2
ответ дан 28 November 2019 в 07:22
поделиться

Оператор ? = устанавливает переменную, только если она еще не установлена: info make * Использование переменных * Настройка .

5
ответ дан 28 November 2019 в 07:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: