web-dev-qa-db-fra.com

Comment savoir d'où un fichier d'en-tête est inclus?

Comment savoir où g ++ a pu trouver un fichier include? 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, existe-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'y parvenir ... existe-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 incluent?

89
harschware

Cela donnera des dépendances make qui listent les chemins absolus des fichiers include:

gcc  -M showtime.c

Si vous ne voulez pas que le système comprenne (c'est-à-dire #include <something.h>) puis utilisez:

gcc  -MM showtime.c
71
Sodved
g++ -H ...

imprimera également le chemin complet des fichiers d'inclusion dans un format qui montre quel en-tête inclut lequel

94
Bulletmagnet

Utilisation sûre

g++ -E -dI  ... (whatever the original command arguments were)
7
wallyk

Si tu utilises -MM ou l'une des options associées (-M, etc.), vous obtenez uniquement la liste des en-têtes qui sont inclus sans avoir toutes les autres sorties de préprocesseur (que vous semblez obtenir avec la suggestion de g++ -E -dI Solution).

5
Jonathan Leffler