web-dev-qa-db-fra.com

D'où vient la valeur de CXX dans un makefile?

Extrait de code:

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

Je sais que CXX est une variable (contenant la commande du compilateur à appeler), mais je me demandais d'où venait cette variable. La variable n'est pas définie dans le makefile et n'est pas une variable d'environnement. Quelqu'un peut-il expliquer d'où vient la valeur de CXX?

41
Ananke Leda

Make a plusieurs variables prédéfinies dont CC. Initialement, il est défini sur cc qui est un lien symbolique vers le compilateur C installé:

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

Également:

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

Vous pouvez le changer si vous voulez.

Vous pouvez utiliser make -p -f /dev/null pour obtenir une liste de toutes les règles et variables implicites. Je ne peux pas afficher la sortie pour le moment car j'ai une installation non standard et la sortie n'est pas en anglais.

34
Mihai Maruseac

CXX est une variable implicite dans GNU make. Il y en a aussi d'autres .

Non seulement cela, ces variables implicites sont utilisées dans règles implicites .

Voici un extrait relatif à la façon dont CXX est utilisé par une règle implicite:

Compilation de programmes C++
n.o Est fait automatiquement à partir de n.cc, n.cpp Ou n.C Avec une recette du formulaire
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c.
Nous vous encourageons à utiliser le suffixe ‘.cc’ pour les fichiers source C++ au lieu de ‘.C’.

17
ArjunShankar

Quelqu'un peut-il expliquer d'où vient la valeur de CXX?

Comme les autres variables "magiques" (LD, RM, MAKE), elle est prédéfinie en interne par make.

2
Konrad Rudolph

Il s'agit d'une variable qu'un utilisateur peut remplacer et qui a pour valeur par défaut g++ (dans le GNU Make version, au moins). Il n'y a rien de plus (ce n'est pas défini dans certains fichiers ou des trucs comme ça).

Source: Le GNU Make Manual

0
Norswap