2012-07-09 7 views
30

Code Snippet:Woher kommt der Wert von CXX in einem Makefile?

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

Ich weiß, dass CXX ist eine Variable (der Compiler-Befehl enthält, zu nennen), aber ich habe mich gefragt, wo diese Variable herkommt. Die Variable ist nicht im Makefile definiert und keine Umgebungsvariable. Kann mir jemand erklären, woher der Wert CXX stammt?

Antwort

29

Fabrikat hat mehr predefined variables unter denen CC ist. Zu Beginn wird es bei cc gesetzt, die ein symbolischer Link auf die installierte C-Compiler ist:

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

auch:

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

Sie können es ändern, wenn Sie möchten.

Sie können make -p -f /dev/null verwenden, um eine Liste aller impliziten Regeln und Variablen zu erhalten. Ich kann die Ausgabe momentan nicht anzeigen, da ich eine nicht standardmäßige Installation habe und die Ausgabe nicht auf Englisch ist.

+3

zum Beispiel: $ make -p -f/dev/null | grep CXX gibt: CXX = g ++ – ady

15

CXX ist eine implizite Variable in GNU make. There are others too.

Nicht nur, dass diese impliziten Variablen in implicit rules verwendet werden.

Hier ist ein Auszug in Bezug auf wie CXX durch eine implizite Regel verwendet wird:

compilieren C++ Programme
n.o wird automatisch aus n.cc, n.cpp oder n.C mit einem Rezept der Form
gemacht $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c.
Wir empfehlen Ihnen, das Suffix '.cc' für C++ - Quelldateien anstelle von '.C' zu verwenden.

1

Kann mir jemand erklären, wo der Wert von CXX herkommt?

Wie andere „magische“ variabes (LD, RM, MAKE), ist es intern von make vordefiniert.

0

Dies ist eine Variable, die ein Benutzer überschreiben kann und die für den Standardwert g++ (zumindest in der GNU-Make-Version) verfügt. Es gibt nichts mehr (es ist nicht in irgendeiner Datei oder solchen Sachen definiert).

Quelle: The GNU Make Manual