跟踪#include依赖关系的工具
有什么好的建议吗?输入将是头文件的名称,输出应是所有文件的列表(最好是树),包括直接或者间接的所有文件。
解决方案
回答
对于较重的溶液,应检查Doxygen。它会扫描代码库,并提供一个有效记录我们代码的网站。它显示的许多内容之一是树木。
如果我们希望能够将此工具的输出插入其他过程中,那么这可能对我们不起作用(尽管Doxygen确实可以将其输出为其他格式,但我对该功能并不真正熟悉)。但是,如果我们只是想看一下依赖项,它应该会很好用。
回答
我玩过一个叫做cinclude2dot的工具。当我来到这里工作时,这对于获取相当大的代码库非常有用。我实际上已经考虑过最终将其集成到我们的日常构建中。
回答
C ++理解应该能够为我们提供帮助:它建立了一个可以从Perl访问的数据库。
回答
如果我们可以访问GCC / G ++,则-M
选项将输出依赖项列表。它没有执行其他工具所做的任何额外工作,但是由于它来自编译器,因此它不可能从"错误的"位置拾取文件。
回答
我们还可以签出makedepend:
http://en.wikipedia.org/wiki/Makedepend
http://www.xfree86.org/current/makedepend.1.html
回答
感谢KeithB。我查找了cl.exe(VS2008)的文档,并找到了/ showIncludes标志。在IDE中,可以从任何CPP文件的属性页中进行设置。
回答
好消息:redhat Source-Navigator(也在Windows上运行)。当然,编译器开关(前面提到过)具有出色的解析能力,我不确定这将如何处理MFC,Qt及其魔术关键字。
回答
cscope(http://cscope.sourceforge.net/)在独立的xterm中执行此操作,也可以在我们喜欢的编辑器中使用,它具有强大的emacs和vi / vim支持。
回答
基于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)
(确保将这些缩进更改为硬标签。)
回答
首先,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图形,而且跨共享文件的项目依赖关系,对构建时间的影响,网格中的详细属性都完美。
回答
有一个免费工具Include File Dependencies Watcher