Как определить, откуда находится заголовочный файл? - PullRequest
87 голосов
/ 29 апреля 2011

Как узнать, где g ++ смог найти файл включения?В основном, если я

#include <foo.h>

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

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

Ответы [ 4 ]

89 голосов
/ 03 сентября 2013
g++ -H ...

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

69 голосов
/ 29 апреля 2011

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

gcc  -M showtime.c

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

gcc  -MM showtime.c
6 голосов
/ 29 апреля 2011

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

g++ -E -dI  ... (whatever the original command arguments were)
5 голосов
/ 29 апреля 2011

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

...