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

Иногда со сложной структурой заголовка это происходит, некоторый заголовок включен, но трудно сказать где от.

Есть ли некоторый инструмент (depedency средство просмотра?) или метод, как найти, "включение складывает" (который источник / который заголовок / который заголовок/...), включает один конкретный заголовочный файл?

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

10
задан Suma 9 August 2010 в 09:04
поделиться

4 ответа

Кто-то писал об этом, но я не могу найти этот ответ. Итак, в VS перейдите в свойства вашего проекта. Выберите Configuration Properties / C / C ++ / Advanced / Show Includes и установите «да».

затем скомпилируйте файл cpp. Это выглядит так: cpp файл:

#include <stdio.h>

int main()
{
    return 0;
}

В окне вывода после компиляции вы увидите:

1>------ Build started: Project: stlport_project, Configuration: Release Win32 ------
1>Compiling...
1>stlport_project.cpp
1>Note: including file: D:\src\hrs_rt_059.00\HRS\modules\src\libs\src\external\stlport\5.1.7\stdio.h
1>Note: including file:  D:\src\hrs_rt_059.00\HRS\modules\src\libs\src\external\stlport\5.1.7\stl/_prolog.h
1>Note: including file:   D:\src\hrs_rt_059.00\HRS\modules\src\libs\src\external\stlport\5.1.7\stl/config/features.h

и так далее

РЕДАКТИРОВАТЬ: ссылка на тот же вопрос Отображение иерархии #include для файла C ++ в Visual Studio

12
ответ дан 3 December 2019 в 15:51
поделиться

Искомый заголовок может быть не включен непосредственно в исходный файл. Вам необходимо "препроцессировать_только" код. Это можно сделать в g++, используя опцию -E; я недостаточно хорошо знаком с визуальным C, чтобы знать, какова точная спецификация, но если вы посмотрите в справке для 'preprocess', вы можете найти что-нибудь.

8
ответ дан 3 December 2019 в 15:51
поделиться

Несколько халтурный подход (но он должен работать на любой платформе/инструментарии, не требуя отдельного анализатора зависимостей) - просто добавить #error в начало включаемого заголовка - тогда вы получите ошибку компиляции от первого .cpp файла, который включает его.

6
ответ дан 3 December 2019 в 15:51
поделиться

Visual Studio / showIncludes

Непосредственно в Visual Studio я нашел параметр под названием / showIncludes - вывод является только текстовым, но с отступом, который упрощает его чтение:

Note: including file: /*..path.anonymized..*/\TCMalloc\windows\config.h
Note: including file:  /*..path.anonymized..*/\memalloc\tcmalloc\windows/port.h
Note: including file:   C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\windows.h
Note: including file:    C:\Program Files\Microsoft Visual Studio 8\VC\include\excpt.h
Note: including file:     C:\Program Files\Microsoft Visual Studio 8\VC\include\crtdefs.h
Note: including file:      C:\Program Files\Microsoft Visual Studio 8\VC\include\sal.h
Note: including file:      C:\Program Files\Microsoft Visual Studio 8\VC\include\vadefs.h
Note: including file:    C:\Program Files\Microsoft Visual Studio 8\VC\include\stdarg.h
Note: including file:    C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\windef.h
Note: including file:     C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h
Note: including file:      C:\Program Files\Microsoft Visual Studio 8\VC\include\ctype.h
Note: including file:       C:\Program Files\Microsoft Visual Studio 8\VC\include\crtdefs.h

ProFactor Include Manager

​​Существует также надстройка VS под названием Include Manager , которая, кажется, обеспечивает необходимую функциональность в очень приятной визуальной форме.

1
ответ дан 3 December 2019 в 15:51
поделиться