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

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

CC?=gcc

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

CC?=g++

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

CC=g++

ДЕЙСТВИТЕЛЬНО ли он использует g++.

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


person inquam    schedule 03.06.2010    source источник


Ответы (4)



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

person Marcelo Cantos    schedule 03.06.2010

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

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

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

person Martin Eve    schedule 03.06.2010

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

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

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

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

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

person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 09.05.2015