2008-09-03 89 views
141

有什么好的建议?输入将是头文件的名称,输出应该是所有文件的列表(最好是树),包括它直接或间接。跟踪#包括依赖关系的工具

+0

这是类似的(但不是复印件)http://stackoverflow.com/questions/74326/how-should-i-detect-unnecessary-include-files- in-a-large-c-project – 2013-10-09 17:36:22

+4

这不是关于“最喜欢的”包含在gcc中很好地显示,但msvs不包含。所以我们(我)正在寻找任何工具。 – fantastory 2014-10-13 08:07:59

+28

为什么我一直在寻找“离题”问题有帮助? – jfritz42 2015-09-30 16:08:39

回答

123

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

26

对于重量级的解决方案,您应该查看Doxygen。它扫描你的代码库,并且有效地提供一个网站,它记录你的代码。它显示的许多事情之一是包括树木。

如果您希望能够将此工具的输出插入其他进程,那么这可能对您无效(尽管Doxygen输出为其他格式,但我并不熟悉该功能)。但是,如果你只是想要注视依赖关系,它应该很好。

19

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

2

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

85

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

Screen shot

10

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

redhat Source-Navigator

1

的cscope(http://cscope.sourceforge.net/)这是否在一个独立的xterm,而且还可以将喜欢的编辑器内部使用 - 它有很大的Emacs和vi/vim的支持。

3

大厦KeithB's answer,这里是gnumake的语法自动1)生成依赖文件,2)让他们最新的,和3)使用它们在你的Makefile:

.dep: 
    mkdir [email protected] 
.dep/%.dep: %.c .dep 
    (echo [email protected] \\; $(CC) $(IFLAGS) -MM $<) > [email protected] || (rm [email protected]; false) 
.dep/%.dep: %.cpp .dep 
    (echo [email protected] \\; $(CXX) $(IFLAGS) -MM $<) > [email protected] || (rm [email protected]; false) 
DEPEND := $(patsubst %.dep,.dep/%.dep,$(OBJ:.o=.dep)) 
-include $(DEPEND) 

(请务必更改)

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图表,还可以交叉共享文件的项目依赖关系,影响构建时间,网格中的详细属性,完美。