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

Откуда взялось значение CXX в make файле?

Фрагмент кода:

target_test : test.cc 
    $(CXX) $(CPPFLAGS) $(CFLAGS) test.cc

Я знаю, что CXX - это переменная (содержащая команду компилятора для вызова), но мне было интересно, откуда эта переменная. Переменная не определена в make файле и не является переменной среды. Может ли кто-нибудь объяснить, откуда берется значение CXX?

4b9b3361

Ответ 1

Make имеет несколько предопределенные переменные, среди которых CC. Первоначально он установлен в CC, который является символической ссылкой на установленный компилятор C:

$ readlink -f `which cc`
/usr/bin/gcc-4.6

также:

$ readlink -f `which c++`
/usr/bin/g++-4.6

Вы можете изменить его, если хотите.

Вы можете использовать make -p -f /dev/null, чтобы получить список всех неявных правил и переменных. Я не могу показать выход прямо сейчас, потому что у меня есть нестандартная установка, а выход не на английском языке.

Ответ 2

CXX является неявной переменной в GNU make. Также есть и другие.

Кроме того, эти неявные переменные используются в неявных правилах.

Вот выдержка о том, как CXX используется неявным правилом:

Компиляция программ на С++
    n.o выполняется автоматически с n.cc, n.cpp или n.C с рецептом формы
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c.
Мы рекомендуем вам использовать суффикс '.cc для исходных файлов на С++ вместо'.C.

Ответ 3

Может ли кто-нибудь объяснить, откуда берется значение CXX?

Как и другие "магические" переменные (LD, RM, MAKE), его предопределено внутренне make make.

Ответ 4

Это переменная, которую пользователь может переопределить и которая имеет значение по умолчанию g++ (по крайней мере, в версии GNU Make). Нет ничего больше (он не определен в каком-то файле или подобном материале).

Источник: Руководство пользователя GNU