Как определить, откуда включен заголовочный файл?

Как я могу узнать, где g++ смог найти файл include? В принципе, если я

#include <foo.h>

g++ сканирует путь поиска, используя любые опции включения, чтобы добавить или изменить путь. Но, в конце концов, есть ли способ, которым я могу сказать абсолютный путь foo.h, который g++ решил скомпилировать? Особенно актуально, если в множестве путей поиска содержится более одного foo.h.

Недостаточно способа выполнить это... есть ли способ заставить g++ рассказать мне, каков его конечный путь поиска после включения значений по умолчанию и все варианты включают?

Ответ 1

Это даст make зависимости, которые перечисляют абсолютные пути include файлов:

gcc  -M showtime.c

Если вы не хотите, чтобы система включала (т.е. #include <something.h>), используйте:

gcc  -MM showtime.c

Ответ 2

g++ -H ...

также напечатает полный путь включенных файлов в формате, который показывает, какой заголовок включает в себя

Ответ 3

Правильное использование

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

Ответ 4

Если вы используете -MM или одну из связанных опций (-M и т.д.), вы получаете только список заголовков, которые включены без наличия всего другого выхода препроцессора (который вы, кажется, получаете с предложенным g++ -E -dI).