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
?
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.
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 den.cc
,n.cpp
Oun.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’.
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.
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