(Visual) Анализ зависимостей проекта на С++

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

Число libs около 40-50, и действительно сложно определить, из чего первоначально была предназначена структура, на полной карте зависимостей нет четкой документации.

Какие инструменты кто-нибудь захочет извлечь такие данные?

Предположительно, самым простым способом, если бы сделали следующее:

  • определить набор путей, соответствующих библиотечным единицам

  • установить все файлы .cpp/.h внутри тех, которые принадлежат к этим единицам компиляции.

  • захватить дерево зависимостей 1-го порядка #include

У одного будет достаточно информации для составления карты-рефактора - и перекомпонуйте карту, пока не будет создан какой-то порядок.

Я отмечаю, что http://www.ndepend.com имеют что-то приятное, но, к сожалению,.NET.

Я прочитал кое-что о том, что Doxygen может выполнить некоторый статический анализ зависимостей с конфигурацией; кто-нибудь когда-либо прижимал его к службе для выполнения такой задачи?

Ответ 2

http://github.com/yuzhichang/cppdep может быть тем, что вы хотите. Я написал его для анализа зависимостей между компонентами/пакетами/группами пакетов большого проекта C/С++. Это переписывание dep_utils (adep/cdep/ldep), которое представлено в книге Джона Лакоса "Крупномасштабная разработка программного обеспечения на С++".

Ответ 3

Этот инструмент отлично подходит для анализа дерева включений: IncludeManager. Вы должны быть в состоянии получить много полезной информации от этого инструмента.

Ответ 4

IncludeFinder - это бесплатный инструмент, который я использовал до успешного использования.

Ответ 5

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

Смотрите: http://www.doxys.org

-Martin

Ответ 6

Я должен начать работать с крупномасштабным проектом С++, который требует управления зависимостями, поэтому, естественно, я искал некоторые инструменты. Я был удивлен, увидев, что CppDepend был отмечен как любимый здесь, поскольку одна лицензия стоит 300 евро, тогда как IncludeManager - 20 фунтов стерлингов. И выполняет ту же работу. На всякий случай, когда кто-либо использовал один или оба инструмента, есть ли "хорошая" причина, почему я должен потратить дополнительные 280 фунтов стерлингов (£ 1 ~ € 1) для CppDepend?

* Обратите внимание, что я хотел бы иметь свою личную копию, так ли она имеет это или нет, не имеет значения.