Инструмент для отслеживания зависимостей #include

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

Ответ 2

Благодаря KeithB. Я просмотрел документы для cl.exe(VS2008) и нашел флаг /showIncludes. Из IDE это можно установить на странице свойств любого файла CPP.

Screen shot

Ответ 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 и их волшебные ключевые слова.

redhat Source-Navigator

Ответ 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.)

Ответ 9

Понять для С++ должен помочь вам: он создает базу данных, доступ к которой вы можете получить с Perl.

Ответ 10

cscope (http://cscope.sourceforge.net/) делает это в автономном xterm, а также может использоваться внутри вашего любимого редактора - у него отличные emacs и поддержка vi/vim.