Откуда взялось значение CXX в make файле?
Фрагмент кода:
target_test : test.cc
$(CXX) $(CPPFLAGS) $(CFLAGS) test.cc
Я знаю, что CXX
- это переменная (содержащая команду компилятора для вызова), но мне было интересно, откуда эта переменная. Переменная не определена в make файле и не является переменной среды. Может ли кто-нибудь объяснить, откуда берется значение CXX
?
Ответы
Ответ 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