我从事一个中等规模的C/C++项目,我已经在该项目中应用了Doxygen+Graphviz。它的头图很有用,但它们只显示基于#include的关系。我感兴趣的是找到一种(最好是基于linux的)工具,它不仅可以根据#include分析文件依赖关系,还可以根据实际的符号使用情况分析文件依赖关系。例如,这样的工具不仅显示a.cpp包含b.h,而且显示a.cpp使用b.h包含的c.h中声明的SomeClass。它还可以建议可以修剪的报头包含。
发布于 2011-05-05 03:11:23
我以前用过Include What You Use,效果很好。它使用Clang来解析C++代码,并建议添加转发声明和删除头文件。
一个缺点是它对你的代码的布局做了假设-基本上是Google编码标准。因此,如果您有一个名为SomeClass.cpp的文件,它只会查看SomeFile.h。此外,建议包括使用项目根目录的完整路径(因此使用#include "src/SomeClass.h"而不是#include "SomeClass.h")。最后,我将我的代码改成了这个约定,因为它避免了歧义,但它需要一个提醒,以防您尝试它。
通常,您只需设置CC=include-what-you-use并重新构建即可获得结果-它使用所有的clang机制来解析-I包含参数。有一个python程序使用结果自动更新你的#include行。
编辑:
另一个不那么复杂的工具是deheader,它设置起来更简单,并且可以建议删除#include。它的工作方式是将C++文件复制到临时位置,删除#include并重新编译。如果重新编译工作正常,则可以安全地删除该头文件。它不会做的是建议转发声明或任何花哨的东西,但它可以减少实现文件中不必要的include行。
https://stackoverflow.com/questions/5888398
复制相似问题