Как узнать, где g ++ нашел включаемый файл? В основном, если я
#include <foo.h>
g ++ просканирует путь поиска, используя любые параметры включения для добавления или изменения пути. Но, в конце концов, есть ли способ определить абсолютный путь к foo.h, который g ++ выбрал для компиляции? Особенно актуально, если во множестве путей поиска есть более одного foo.h.
Если не считать способа добиться этого ... есть ли способ заставить g ++ сказать мне, каков его окончательный путь поиска после включения значений по умолчанию и всех параметров включения?
Ответы:
Это даст make зависимости, в которых перечислены абсолютные пути включаемых файлов:
Если вы не хотите, чтобы система включала (т.е.
#include <something.h>
), используйте:источник
также напечатает полный путь к включаемым файлам в формате, который показывает, какой заголовок включает какие
источник
clang++ -MM -H
(что немного полезная комбинация).clang++ -H -fsyntax-only ...
если вы не хотите создавать файлы вывода (gcc
тоже работает ).Конечно использовать
источник
Если вы используете
-MM
или один из связанных параметров (-M
и т. Д.), Вы получаете только список заголовков, которые включены, без вывода всех остальных выходных данных препроцессора (которые вы, кажется, получаете с предлагаемымg++ -E -dI
решением).источник
g++ -MM t.cc
не показывает включения вообще, простоt.o: t.cc
. А что-то еще нужно?/showIncludes
опцию. MSVC даже сделает отступ, чтобы показать вам вложение заголовков (я не вижу этого-M
в GCC).