跟踪#include依赖的工具

有什么好的build议? input将是一个头文件的名称和输出应该是一个列表(最好是一个树)的所有文件,包括它直接或间接。

如果您有权访问GCC / G ++,那么-M选项将输出相关性列表。 它不会执行其他工具所做的任何额外的工作,但是由于它是来自编译器,所以不可能从“错误”的地方拾取文件。

感谢KeithB。 我查了cl.exe文件(VS2008),并find/ showIncludes标志。 从IDE中,这可以从任何CPP文件的属性页面设置。

屏幕截图

对于重量级的解决scheme,你应该检查出Doxygen 。 它扫描你的代码库,并有效地提供一个网站,它logging你的代码。 它显示的许多事情之一是包括树木。

如果您希望能够将此工具的输出插入到其他进程中,那么这可能对您不适用(虽然Doxygen输出为其他格式,但我并不熟悉该function)。 如果你只是想要眼睛的依赖,但它应该很好。

我玩过一个名为cinclude2dot的工具。 当我来这里工作时,处理一个相当大的代码库是非常有用的。 我实际上已经考虑到最终将其整合到我们的日常构build中。

首先,cinclude2dot.pl是一个perl脚本,用于分析C / C ++代码,并生成#include依赖图作为点文件input到graphviz中。

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

如果你不想走这种手动工具的方式,那么在我看来,获胜者的胜利者就是来自ProFactor的称为“包括pipe理器”的工具。

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

有一个免费试用,这是真棒。 这是一个完全集成的Visual Studio插件,所以双击这里的东西将把它带到它所在的地方。

工具提示鼠标hover给你所有你想要的信息,它可以让你向下/向上钻取,删除你不关心的整个子树,查看图表以外的表示,循环浏览匹配列表,这是非常棒的。

如果您对此有所了解,可以在试用结束之前重构大型项目的#include结构。 即使如此,它也不需要花费太多,每个许可证大约35美元。

为了它的作用,它只是完美的。 不仅包括#includegraphics,还跨越共享文件的项目依赖关系,影响构build时间,在网格中的详细属性,完美。

好消息是: redhat Source-Navigator (也在Windows上运行)。 当然,编译器开关(前面提到过)具有更好的parsingfunction,我不确定这将如何处理MFC,Qt及其魔术关键字。

redhat Source-Navigator

build立在KeithB的答案 ,这里是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) 

(确保将这些缩进更改为hardtabs。)

了解C ++应该能够帮助你:它build立一个你可以从Perl访问的数据库。

cscope( http://cscope.sourceforge.net/ )可以在独立的xterm中执行此操作,也可以在您最喜欢的编辑器中使用 – 它具有很好的emacs和vi / vim支持。

有一个免费的工具包括文件依赖关系观察器