132 votes

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

Comment puis-je savoir où g++ a pu trouver un fichier include ? En fait, 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, en fin de compte, y a-t-il un moyen de connaître le chemin absolu de foo.h que g++ a choisi de compiler ? C'est particulièrement important s'il y a plus d'un foo.h dans la myriade de chemins de recherche.

En l'absence d'un moyen d'accomplir cela... existe-t-il un moyen de faire en sorte que g++ me dise quel est son chemin de recherche final après avoir inclus les valeurs par défaut et toutes les options d'inclusion ?

152voto

Bulletmagnet Points 165
g++ -H ...

affichera également le chemin complet des fichiers d'inclusion dans un format qui indique quel en-tête inclut quel fichier.

92voto

Sodved Points 5317

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 inclue (c'est-à-dire #include <something.h> ), puis utiliser :

gcc  -MM showtime.c

12voto

wallyk Points 33150

Utilisation sûre

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

7voto

sudo rm -rf slash Points 403

Si votre processus de construction est très compliqué...

constexpr static auto iWillBreak = 
#include "where/the/heck/is/this/file.h"

Cela provoquera (presque à coup sûr) une erreur de compilation au début du fichier en question. Cela devrait vous montrer une erreur de compilation avec le chemin que le compilateur voit.

C'est évidemment pire que les autres réponses, mais ce genre de piratage est parfois utile.

6voto

Jonathan Leffler Points 299946

Si vous utilisez -MM ou l'une des options associées ( -M etc), vous n'obtenez que la liste des en-têtes qui sont inclus sans avoir toutes les autres sorties du préprocesseur (que vous semblez obtenir avec l'option suggérée g++ -E -dI ).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X