Что означает CC? = В MakeFile?
Вопрос
У меня есть файл Makefil для программы C, которая имеет декларацию
CC?=gcc
Изменить это на
CC?=g++
не заставляет его компилировать с G ++. Изменить это на
CC=g++
Делает это использовать G ++.
Так что мне интересно, что делает оператор? = Оператор? Я предполагаю, что он рассматривает переменную среды, чтобы решить, какой компилятор использовать и если она не установлена, то используйте GCC? Кто -нибудь, кто может это прояснить?
Решение
Из http://www.gnu.org/software/make/manual/make.html:
Есть еще один оператор назначения для переменных, `? = '. Это называется условным оператором назначения переменной, поскольку оно оказывает эффект только в том случае, если переменная еще не определена. Это утверждение:
FOO ?= bar
точно эквивалентен этому (см. Функцию происхождения):
ifeq ($(origin FOO), undefined) FOO = bar endif
Вероятно CC
уже определяется как gcc
, так CC ?= g++
не будет переопределять существующие gcc
.
Другие советы
А ?=
Оператор устанавливает переменную только в том случае, если она еще не установлена: info make
→ * Using Variables
→ * Setting
.
"?" Оператор означает установить, если еще не установлен.
Итак, если CC уже пуст CC? = Установит его. Если CC уже что -то содержит, это не так.
Источник: http://unix.derkeiler.com/mailing-lists/freebsd/questions/2007-03/msg02057.html
Как упоминалось другие, это, вероятно, уже предопределено.
На GNU вы можете увидеть, что определено с помощью make -p
из каталога, который не содержит Makefile
.
Это задокументировано на: https://www.gnu.org/software/make/manual/html_node/implicite-variables.html
Обычно, CC=cc
по умолчанию. Затем на Ubuntu 14.04 для EG, cc
обычно является символом gcc
.
Чтобы отключить все переменные одновременно увидеть: Отключить создание встроенных правил и переменных изнутри файла make Кажется в настоящее время невозможным.