跟踪#include依赖项的工具

时间:2008-09-03 18:58:35

标签: c++ c header

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

11 个答案:

答案 0 :(得分:136)

如果您有权访问GCC / G ++,那么-M option将输出依赖关系列表。它不会执行其他工具所做的任何额外工作,但由于它来自编译器,因此它不可能从“错误”的位置拾取文件。

答案 1 :(得分:90)

感谢KeithB。我查找了cl.exe(VS2008)的文档,找到了/ showIncludes标志。在IDE中,可以从任何CPP文件的属性页面进行设置。

Screen shot

答案 2 :(得分:28)

对于重量级解决方案,您应该查看doxygen。它会扫描您的代码库并提供一个有效的网站,用于记录您的代码。它显示的许多东西之一包括树木。

如果您希望能够将此工具的输出插入其他进程,那么这可能对您不起作用(虽然doxygen确实输出到其他格式,但我并不熟悉该功能)。但是,如果您只是想要了解依赖关系,那么它应该会很好用。

答案 3 :(得分:19)

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

答案 4 :(得分:12)

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

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

如果你不想采用那种手动工具的方式,那么在我看来,直到最后的赢家都是来自ProFactor的名为“IncludeManager”的工具。

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

有免费试用版,非常棒。它是Visual Studio的一个完全集成的插件,所以双击这里的东西会带你到那里包含它的地方。

工具提示鼠标悬停为您提供所需的所有信息,它可以让您向下钻取/删除,删除您不关心的整个子树,查看图形以外的表示,循环显示此匹配列表,太棒了。

如果您对此很快,可以在试用期结束前重构大型项目的#include结构。即便如此,它也不会花费太多,每个许可证大约35美元。

对于它的作用,它只是完美无缺。不仅包括#include图,还包括跨共享文件的项目依赖性,对构建时间的影响,网格中的详细属性,完美。

答案 5 :(得分:11)

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

redhat Source-Navigator

答案 6 :(得分:5)

KeithB's answer上构建,这里是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。)

答案 7 :(得分:4)

答案 8 :(得分:3)

Understand for C++应该可以帮助您:它构建一个可以从Perl访问的数据库。

答案 9 :(得分:1)

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

答案 10 :(得分:-1)