(可视化) C++ 项目依赖分析

11

我正在新的工作地点开展一些大型项目,它们之间存在一组复杂的静态库依赖关系。

这些库大约有40-50个,很难确定最初的结构应该是什么样子的,没有清晰的完整依赖关系图的文档。

有没有人推荐一些工具来提取这样的数据?

假设以最简单的方式进行:

  1. 定义与库单元相对应的路径集

  2. 将这些路径下的所有.cpp/.h文件设置为属于这些编译单元

  3. 捕获第一级 #include 依赖树

一旦收集到足够的信息,就可以创建一个映射 - 重构 - 并重新创建映射,直到创建出一些顺序。

我注意到 http://www.ndepend.com 有一些不错的东西,但只适用于 .NET。

我读到一些关于 Doxygen 能够通过配置实现某些静态依赖性分析的内容; 有没有人曾经使用它来完成这样的任务?

6个回答

11

现在这正是我一直在寻找的。我一直对 NDepend 产品所能做到的感到嫉妒。不过,我们最需要像这样的工具的是那些需要维护的大量传统 C++ 代码。 - polyglot
2
嗯...也许我有点迟钝,但是CppDepend(2.8.5)似乎不允许查看文件依赖项(#include 依赖项)。它确实显示了大量信息,但“仅限”于项目+类级别。 - Martin Ba

4

http://github.com/yuzhichang/cppdep 可能是您需要的工具。 我编写它是为了分析大型C/C++项目中组件/包/包组之间的依赖关系。 它是dep_utils(adep/cdep/ldep)的重写版本,该工具由John Lakos的著作《大规模C++软件设计》提供。


3

这个工具非常适合分析include树:IncludeManager。你应该能够从这个工具中获得很多有用的信息。


坏了一点的链接。 - Prof. Falken

2
我即将开始参与一个大型的C++项目,需要进行依赖管理,因此我一直在寻找一些工具。令我惊讶的是,CppDepend被标记为最受欢迎的工具,单个许可证的成本为300欧元,而IncludeManager只需20英镑...并且完成相同的工作。以防这里有人使用过这两个工具,是否有“好”的理由让我花费额外的280英镑(1英镑约合1欧元)购买CppDepend呢?
*请注意,我希望拥有自己的个人副本,因此公司是否拥有它都无关紧要。

2
您可以使用DoxyS来作为帮助工具,它会生成图表以表示所包含的文件,作为生成文档的一部分。
请参见:http://www.doxys.org -Martin

2

IncludeFinder 是一款我以前成功使用过的免费工具。


谢谢,它看起来有点过时了,但有几个人提到过它,所以它肯定在某个阶段有过辉煌的时期。 :) - polyglot
1
由于它有源代码,我可以进行一些适合我当前需求的小修改。但是,它并不太亮眼 ;) - peterchen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接