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

有帮助吗?

解决方案

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

其他提示

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

Screen shot

对于重量级解决方案,您应该查看 强力氧. 。它会扫描您的代码库并提供一个有效地记录您的代码的网站。它显示的众多内容之一是包括树木。

如果您希望能够将该工具的输出插入到其他进程中,那么这可能不适合您(尽管 doxygen 确实输出为其他格式,但我不太熟悉该功能)。不过,如果您只是想了解依赖关系,它应该会很好用。

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

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

http://www.florish.org/cinclude2dot/

如果您不想采用那种手动工具,那么我认为迄今为止毫无疑问的获胜者是 ProFactor 的“IncludeManager”工具。

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

有免费试用,非常棒。它是完全集成的 Visual Studio 插件,因此双击此处的某些内容即可转到该插件所在的位置。

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

如果您反应很快,您可以在试用期结束之前重构大型项目的 #include 结构。即便如此,它的成本并不高,每个许可证大约 35 美元。

就其功能而言,它几乎是完美的。不仅包括#include 图表,还包括共享文件的跨项目依赖关系、对构建时间的影响、网格中的详细属性,完美。

好消息: redhat 源导航器 (也可在 Windows 上运行)。当然,编译器开关(前面提到的)具有出色的解析能力,我不确定这将如何处理 MFC、Qt 及其魔术关键字。

redhat Source-Navigator

建立在 基思B的回答, ,这里是 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)

(确保将这些缩进更改为硬标签。)

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top