2010-06-03 4 views
22

У меня есть Makefile для программы C, который имеет декларациюЧто означает CC? = В Makefile?

CC?=gcc 

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

CC?=g++ 

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

CC=g++ 

ДЕЙСТВУЕТ использовать g ++.

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

ответ

29

От http://www.gnu.org/software/make/manual/make.html:

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

FOO ?= bar 

в точности эквивалентно этому (см происхождение функции):

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

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

5

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

0

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

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

Это отражено в: https://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html

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

Чтобы отключить все переменные сразу, см.: Disable make builtin rules and variables from inside the make file В настоящее время невозможно.

Смежные вопросы