跟踪工具 # include 依赖项

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

81317 次浏览

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

如果您希望能够将此工具的输出插入到其他进程中,那么这可能不适合您(虽然 doxygen 确实可以将输出插入到其他格式,但我并不十分熟悉这个特性)。不过,如果您只是想观察一下依赖项,那么它应该可以很好地工作。

我用过一个叫 辛克莱德2点的工具。当我来到这里工作时,它对于处理一个相当大的代码库非常有用。实际上,我已经考虑过最终将其集成到我们的日常构建中。

理解 C + + 应该能够帮助您: 它构建了一个可以从 Perl 访问的数据库。

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

多亏了 KeithB。我查找了 cl.exe (VS2008)的文档,发现了/showinclude 标志。在 IDE 中,可以从任何 CPP 文件的属性页设置此属性。

Screen shot

好消息: 红帽源代码-导航器(也可以在 Windows 上运行)。当然,编译器开关(前面提到过)具有优越的解析能力,我不确定这将如何处理 MFC、 Qt 和它们神奇的关键字。

redhat Source-Navigator

Cscope (http://cscope.sourceforge.net/)在一个独立的 xterm 中完成这项工作,也可以在您喜欢的编辑器中使用——它有很好的 emacs 和 vi/vim 支持。

KeithB 的回答为基础,GNUmake 语法可以自动生成依赖文件,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)

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

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