Подтвердить что ты не робот

Что означает CC? = В Makefile?

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

CC?=gcc

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

CC?=g++

НЕ делает компиляцию с g++. Изменение его на

CC=g++

Использует g++.

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

4b9b3361

Ответ 1

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

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

 FOO ?= bar

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

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

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

Ответ 2

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

Ответ 4

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

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

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

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

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