Skąd pochodzi wartość CXX w pliku makefile?

Fragment Kodu:

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

Wiem, że CXX jest zmienną (zawierającą polecenie kompilatora do wywołania), ale zastanawiałem się skąd ta zmienna pochodzi. Zmienna nie jest zdefiniowana w pliku makefile i nie jest zmienną środowiskową. Czy ktoś może wyjaśnić skąd pochodzi wartość CXX?

 36
Author: Konrad Rudolph, 2012-07-09

4 answers

Make ma kilka predefiniowanych zmiennych , wśród których jest CC. Początkowo jest ustawiony na cc, który jest dowiązaniem symbolicznym do zainstalowanego kompilatora C:

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

Także:

$ readlink -f `which c++`
/usr/bin/g++-4.6
Możesz to zmienić, jeśli chcesz.

Możesz użyć make -p -f /dev/null, Aby uzyskać listę wszystkich ukrytych reguł i zmiennych. Nie mogę teraz pokazać wyjścia, ponieważ mam niestandardową instalację i wyjście nie jest w języku angielskim.

 31
Author: Mihai Maruseac,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-09 12:13:14

CXX jest zmienną domyślną w GNU make. są też inne .

Nie tylko to, te zmienne niejawne są używane w niejawnych regułach .

Oto Wyciąg odnoszący się do tego, jak CXX jest używany przez zasadę implicit:

Kompilowanie programów C++
n.o jest wykonywana automatycznie z n.cc, n.cpp, lub n.C z przepisem z formularza
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c.
Zachęcamy do używania przyrostka'. cc ' dla plików źródłowych C++ zamiast '.C'.

 16
Author: ArjunShankar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-09 12:08:02

Czy ktoś może wyjaśnić skąd pochodzi wartość CXX?

Podobnie jak inne" magiczne " odmiany (LD, RM, MAKE), jest predefiniowany wewnętrznie przez make.

 1
Author: Konrad Rudolph,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-09 12:08:13

Jest to zmienna, którą użytkownik może nadpisać i która ma domyślną wartość g++ (przynajmniej w wersji GNU Make). Nie ma w tym nic więcej (nie jest zdefiniowany w jakimś pliku lub podobnych rzeczach).

Source: The GNU Make Manual

 0
Author: Norswap,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-09 12:08:16