Что означает CC? = В Makefile? - PullRequest
25 голосов
/ 03 июня 2010

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

CC?=gcc

Изменение на

CC?=g++

НЕ компилируется с g ++. Меняя его на

CC=g++

заставляет его использовать g ++.

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

Ответы [ 4 ]

33 голосов
/ 03 июня 2010

С http://www.gnu.org/software/make/manual/make.html:

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

 FOO ?= bar

в точности соответствует этому (см. Функция происхождения):

 ifeq ($(origin FOO), undefined)
   FOO = bar
 endif

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

5 голосов
/ 03 июня 2010

Оператор ?= устанавливает переменную, только если она еще не установлена: info make & rarr; * Using Variables & rarr; * Setting.

2 голосов
/ 03 июня 2010

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

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

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

1 голос

Как уже упоминалось, это, вероятно, уже предопределено.

В GNU вы можете видеть, что определено с make -p из каталога, который не содержит Makefile.

Это задокументировано по адресу: https://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html

Обычно CC=cc по умолчанию. Затем в Ubuntu 14.04, например, cc обычно является символической ссылкой на gcc.

Чтобы отключить все переменные одновременно, см .: Отключить встроенные правила make и переменные внутри файла make В настоящее время кажется невозможным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...