Ответ 1
Есть настройка:
Настройки проекта → Свойства конфигурации → C/C++ → Дополнительно → Показать включает
это сгенерирует дерево. Он сопоставляется с переключателем компилятора /showIncludes
Проблема: У меня есть большой проект Visual С++, который я пытаюсь перенести в Visual Studio 2010. Это огромное количество материалов из разных источников и разных возрастов. У меня возникают проблемы, потому что что-то включает в себя как winsock.h
, так и winsock2.h
.
Вопрос: Какие инструменты и методы существуют для отображения иерархии #include
для исходного файла Visual Studio С++?
Я знаю о cl /P
для получения вывода препроцессора, но это явно не показывает, какой файл содержит другие файлы (и в этом случае /P
выход 376,932 строк длиной 8 -)
В идеальном мире я бы хотел, чтобы иерархическое отображение того, какие файлы включают в себя другие файлы, а также номера строк, чтобы я мог перейти в исходные тексты:
source.cpp(1)
windows.h(100)
winsock.h
some_other_thing.h(1234)
winsock2.h
Есть настройка:
Настройки проекта → Свойства конфигурации → C/C++ → Дополнительно → Показать включает
это сгенерирует дерево. Он сопоставляется с переключателем компилятора /showIncludes
Компилятор также поддерживает переключатель /showIncludes - он не дает вам номера строк, но может дать довольно полное представление о том, что включает в себя откуда.
В настройках проекта → Свойства конфигурации → C/С++ → Дополнительно → Показать включает.
Мы нашли IncludeManager, чтобы стать очень мощным инструментом. Это не бесплатно (но не дорого), и это позволило нам получить контроль над нашими проблемами Include и отказаться от нашего времени компиляции с 50 минут до 8 минут, обрезая большие куски, включая мы не использовали.
Не так хорошо, как gcc иерархическая функция включения, которая показывает иерархию включения прямой линии в случае ошибки. Опция "show includes" в VS показывает все, что является излишним при отладке иерархических файлов, включая проблемы с файлами.
Здесь является хорошим сторонним инструментом FOSS. Вы можете экспортировать результаты в XML, который будет содержать данные о количестве вхождений и номеров строк.
Попробуйте redhat Source-Navigator для более графического решения.
Теперь для Visual Studio существует плагин IncludeToolbox. Он может перечислить ваши зависимые включения и делать больше вещей, таких как случайное удаление и компиляция, чтобы увидеть, требуется ли это включение.
cl/P должен показывать номера строк, чтобы вы могли указать контекст того, куда будет включаться заголовочный файл.
Если вы вычеркнете строки с помощью...
grep "^ # строка" file.i
... тогда у вас должно быть довольно чистое указание на то, какие файлы были встречены в порядке препроцессора.
Если это один случай, это должно быть довольно быстрой диагностикой.