Определите, какой файл включает в себя какой-то конкретный заголовочный файл - PullRequest
10 голосов
/ 09 августа 2010

Иногда со сложной структурой заголовка бывает, что какой-то заголовок включен, но трудно сказать, откуда.

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

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

Ответы [ 4 ]

12 голосов
/ 09 августа 2010

Кто-то написал об этом, но я не могу найти этот ответ.Итак, в VS перейдите в свойства вашего проекта.Выберите «Свойства конфигурации» / C / C ++ / «Дополнительно» / «Показать включения» и установите «да».

, затем скомпилируйте файл 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

и т. Д.

EDIT: ссылка натот же вопрос Отображение иерархии #include для файла C ++ в Visual Studio

8 голосов
/ 09 августа 2010

Заголовок, который вы ищете, не может быть непосредственно включен в исходный файл. Вам нужно «preprocess_only» код. Это можно сделать в g ++ с помощью опции -E; Я не знаю достаточно о Visual C, чтобы знать, какая именно спецификация существует, но если вы посмотрите в справке «preprocess», вы можете что-то придумать.

6 голосов
/ 09 августа 2010

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

1 голос
/ 09 августа 2010

Visual Studio / showInclude

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

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

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

...