Comment puis-je savoir où g ++ a pu trouver un fichier d'inclusion? Fondamentalement, si je
#include <foo.h>
g ++ analysera le chemin de recherche, en utilisant toutes les options d'inclusion pour ajouter ou modifier le chemin. Mais, à la fin des jours, y a-t-il un moyen de savoir le chemin absolu de foo.h que g ++ a choisi de compiler? Particulièrement pertinent s'il y a plus d'un foo.h dans la myriade de chemins de recherche.
À court d'un moyen d'accomplir cela ... y a-t-il un moyen pour que g ++ me dise quel est son chemin de recherche final après avoir inclus les valeurs par défaut et toutes les options incluses?
Réponses:
Cela donnera des dépendances make qui listent les chemins absolus des fichiers d'inclusion:
Si vous ne voulez pas que le système inclue (c'est-à-dire
#include <something.h>
), utilisez:la source
affichera également le chemin complet des fichiers d'inclusion dans un format qui montre quel en-tête inclut lequel
la source
clang++ -MM -H
(ce qui est une combinaison légèrement utile).clang++ -H -fsyntax-only ...
si vous souhaitez éviter de générer des fichiers de sortie (fonctionnegcc
aussi pour ).Utilisation sûre
la source
Si vous utilisez
-MM
ou l'une des options associées (-M
, etc.), vous obtenez uniquement la liste des en-têtes inclus sans avoir toutes les autres sorties du préprocesseur (que vous semblez obtenir avec lag++ -E -dI
solution suggérée ).la source
g++ -MM t.cc
ne montre aucune inclusion du tout, justet.o: t.cc
. A-t-il besoin d'autre chose?/showIncludes
option. MSVC mettra même en retrait pour vous montrer l'imbrication des en-têtes (je ne vois pas cela avec-M
sur GCC).