Любые хорошие предложения? Вход будет именем файла заголовка, и вывод должен быть списком (предпочтительно деревом) всех файлов, включая его прямо или косвенно.
Инструмент для отслеживания зависимостей #include
Ответ 1
Если у вас есть доступ к GCC/g++, параметр -M
будет выводить список зависимостей. Он не делает ничего лишнего, что делают другие инструменты, но поскольку он исходит от компилятора, нет никаких шансов, что он заберет файлы из "неправильного" места.
Ответ 2
Благодаря KeithB. Я просмотрел документы для cl.exe(VS2008) и нашел флаг /showIncludes. Из IDE это можно установить на странице свойств любого файла CPP.
Ответ 3
Для решения тяжелого веса, вы должны проверить Doxygen. Он сканирует вашу кодовую базу и эффективно создает веб-сайт, документирующий ваш код. Одна из многих вещей, которые он показывает, включает деревья.
Если вы хотели подключить выходные данные этого инструмента к другому процессу, это может не сработать для вас (хотя doxygen выводит данные в другие форматы, я не очень знаком с этой функцией). Если вы просто хотите взглянуть на зависимости, это должно работать отлично.
Ответ 4
Я играл с инструментом под названием cinclude2dot. Это было очень полезно для того, чтобы получить ручку на довольно большой базе кода, когда я пришел сюда работать. Я действительно думал о том, чтобы интегрировать его в нашу ежедневную сборку.
Ответ 5
Сначала cinclude2dot.pl является perl script, который анализирует код C/С++ и создает граф зависимости #include в виде точечного файла для ввода в graphviz.
http://www.flourish.org/cinclude2dot/
Если вы не хотите идти по пути такого ручного инструмента, то, безусловно, победителем станет инструмент, известный как "IncludeManager" из ProFactor.
http://www.profactor.co.uk/includemanager.php
Там бесплатная пробная версия, и это потрясающе. Это плагин для Visual Studio, который полностью интегрирован, поэтому двойной щелчок по чему-то здесь приведет вас туда, где он включен.
Подсказки подсказки подсказки дают вам всю информацию, которую вы хотите, и она позволяет вам развернуть/вверх, удалить целые поддеревья, которые вам не нужны, просматривать представления, отличные от графиков, циклически перебирать список совпадений для этого и того, это замечательно.
Если вы быстро это сделаете, вы можете реорганизовать структуру #include больших проектов до завершения пробной версии. Тем не менее, это не очень дорого, около 35 долларов США за лицензию.
Что он делает, он почти идеален. Не только #include графы, но и кросс-зависимости проектов для общих файлов, влияние на время сборки, подробные свойства в сетках, совершенные.
Ответ 6
Хорошая новость: redhat Source-Navigator (работает и в Windows). Конечно, компиляторы (упомянутые ранее) имеют превосходный синтаксический анализ, и я не уверен, как это будет обрабатывать MFC, Qt и их волшебные ключевые слова.
Ответ 7
Основываясь на Ответ KeithB, здесь синтаксис GNUmake автоматически 1) генерирует файлы зависимостей, 2) сохраняйте их в актуальном состоянии и 3) используйте их в своем Makefile:
.dep:
mkdir [email protected]
.dep/%.dep: %.c .dep
(echo [email protected] \\; $(CC) $(IFLAGS) -MM $<) > [email protected] || (rm [email protected]; false)
.dep/%.dep: %.cpp .dep
(echo [email protected] \\; $(CXX) $(IFLAGS) -MM $<) > [email protected] || (rm [email protected]; false)
DEPEND := $(patsubst %.dep,.dep/%.dep,$(OBJ:.o=.dep))
-include $(DEPEND)
(Обязательно измените эти отступы на hardtabs.)
Ответ 8
Вы также можете проверить makedepend:
Ответ 9
Понять для С++ должен помочь вам: он создает базу данных, доступ к которой вы можете получить с Perl.
Ответ 10
cscope (http://cscope.sourceforge.net/) делает это в автономном xterm, а также может использоваться внутри вашего любимого редактора - у него отличные emacs и поддержка vi/vim.
Ответ 11
Существует бесплатный инструмент Включить наблюдателя зависимостей файловой системы