Вопрос

У меня есть файл 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 Кажется в настоящее время невозможным.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top