C ++ включает файловый браузер - PullRequest
8 голосов
/ 13 июля 2009

У меня очень большой проект с тоннами извилистых заголовочных файлов, которые все включают друг друга. Существует также огромное количество сторонних библиотек, от которых это зависит. Я пытаюсь исправить беспорядок, но у меня возникают некоторые проблемы, так как большую часть времени я удаляю одну директиву #include только для того, чтобы выяснить, что материал, который она включала, все еще включается через один из других файлов. , Есть ли инструмент, который может помочь мне понять это? Мне бы очень хотелось иметь возможность щелкнуть файл .h и спросить его, в какие файлы CPP он включен (прямо или косвенно) и пути, по которым он включен, а также щелкнуть файл cpp и спросить, какой. h файлы включены (прямо и косвенно). Я никогда не слышал об инструменте, который делает это, и немного быстрого поиска в Google ничего не нашел, но, возможно, я не знаю, что искать.

Ответы [ 5 ]

4 голосов
/ 14 июля 2009
4 голосов
/ 14 июля 2009

Для VS2003 есть флаг / showInclude (в свойствах C / C ++ / Advanced). Это напечатает все заголовки каждого файла .cpp и то, что они включают, так что вы можете перейти оттуда.

Я уверен, что для VS2008 в том же месте есть такая же опция.

3 голосов
/ 13 июля 2009

если вы используете компиляторы GCC, попробуйте это

g++ -M abc.cpp

покажет все включаемые зависимости для файла abc.cpp

0 голосов
/ 14 июля 2009

Это довольно утомительно, но вы можете выполнить бинарный поиск в том месте, где происходит #include, с помощью #error (и сообщения #pragma), чтобы сузить, какая строка включает подтягивание третьей стороны. Я сделал это в случае с одним файлом, который пытался отследить, но похоже, что ваша проблема больше, поэтому, вероятно, один из инструментов, упомянутых другими, будет более эффективным.

0 голосов
/ 14 июля 2009

Твоя ситуация напоминает мне мою. У меня есть несколько созданных мной заголовков, которые я использую в качестве библиотеки вместо того, чтобы возиться с DLL.

Конечно, циклическое включение может стать проблематичным, поэтому я считаю, что такой инструмент, как Visual Assist X (1) , помогает в таких вещах , У него есть функция, которая может находить ссылки на вещи, так что вы можете легко отсеять, где что-то определено / объявлено / включено и т. Д. У него также есть много других полезных функций, поэтому я считаю, что это довольно полезно.

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

НТН

...