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

StackOverflow https://stackoverflow.com/questions/42308

  •  09-06-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

Если у вас есть доступ к GCC/G ++, то -M вариант выведет список зависимостей.Он не выполняет ничего из того, что делают другие инструменты, но поскольку он поступает от компилятора, нет никаких шансов, что он заберет файлы из "неправильного" места.

Другие советы

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

Screen shot

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

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

Я поиграл с инструментом под названием cinclude2dot.Это было довольно полезно для того, чтобы разобраться с довольно большой кодовой базой, когда я пришел сюда работать.Я действительно подумывал о том, чтобы в конце концов интегрировать это в нашу повседневную сборку.

Во-первых, cinclude2dot.pl - это скрипт на perl, который анализирует код на C / C ++ и создает график зависимостей #include в виде точечного файла для ввода в graphviz.

http://www.flourish.org/cinclude2dot/

Если вы не хотите идти по пути такого рода ручных инструментов, то, на мой взгляд, безусловным победителем является инструмент, известный как "IncludeManager" от ProFactor.

http://www.profactor.co.uk/includemanager.php

Есть бесплатная пробная версия, и она потрясающая.Это плагин для Visual Studio, который полностью интегрирован, поэтому двойной щелчок по чему-либо здесь приведет вас к тому месту, где это включено вон там.

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

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

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

Хорошие новости: источник redhat-Навигатор (работает и в Windows).Конечно, переключатели компилятора (упомянутые ранее) имеют превосходный синтаксический анализ, и я не уверен, как это будет обрабатывать MFC, Qt и их волшебные ключевые слова.

redhat Source-Navigator

Опираясь на Ответ Китба, вот синтаксис GNUmake для автоматического 1) создания файлов зависимостей, 2) поддержания их в актуальном состоянии и 3) использования их в вашем makefile:

.dep:
    mkdir $@
.dep/%.dep: %.c .dep
    (echo $@ \\; $(CC) $(IFLAGS) -MM $<) > $@ || (rm $@; false)
.dep/%.dep: %.cpp .dep
    (echo $@ \\; $(CXX) $(IFLAGS) -MM $<) > $@ || (rm $@; false)
DEPEND := $(patsubst %.dep,.dep/%.dep,$(OBJ:.o=.dep))
-include $(DEPEND)

(Обязательно измените эти отступы на твердые.)

Вы также можете проверить создать зависимость:

http://en.wikipedia.org/wiki/Makedepend

http://www.xfree86.org/current/makedepend.1.html

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top