-M
选项将输出依赖关系列表。它不执行其他工具所做的任何额外操作,但由于它来自编译器,因此不会有机会从“错误”的位置获取文件。-MM
跳过系统头文件。 - TheJosh-o
选项,编译器会将输出写入文件而非标准输出。 - Hi-Angelstderr
而不是stdout
。否则,该选项更为通用。 - user877329感谢KeithB。 我查看了cl.exe(VS2008)的文档,并找到了/showIncludes标志。从IDE中,可以在任何CPP文件的属性页面中设置此标志。
math.h
。 - abergmeier如果你需要一种重量级的解决方案,可以尝试查看doxygen。它会扫描你的代码库,并生成一个有效的网站来记录你的代码,其中包括依赖关系树等内容。
如果你希望将此工具的输出连接到其他进程,则可能不适用(虽然doxygen可以输出到其他格式,但我对该功能不太熟悉)。但如果你只是想查看依赖关系,则这个工具非常适合。
我曾经尝试使用一个叫做cinclude2dot的工具。在我来这里工作时,它对于理解一个相当大的代码库非常有用。我实际上考虑将其最终整合到我们的日常构建中。
.cc/.c/.cxx
文件(只有其中的.h
文件),则可能是多余的。 - KRoy首先,cinclude2dot.pl是一个perl脚本,它分析C/C++代码并生成一个包含依赖关系的图形文件作为输入到graphviz中。
http://www.flourish.org/cinclude2dot/
如果您不想使用这种类型的手动工具,那么在我看来,毫无疑问,最好的选择是来自ProFactor的"IncludeManager"工具。
http://www.profactor.co.uk/includemanager.php
它有一个免费试用版,非常棒。它是Visual Studio的插件,完全集成,因此在此处双击某个东西会将您带到包含它的位置。
工具提示鼠标悬停时会提供您想要的所有信息,并允许您向下/向上钻取,删除您不关心的整个子树,查看除图形以外的表示形式,循环浏览与此和那个匹配的列表,非常出色。
如果您快速进行,可以在试用期内重构大型项目的#include结构。即使如此,它的成本也不高,大约每个许可证35美元。
对于它所做的事情,它几乎是完美的。不仅包含依赖图,还包括共享文件的跨项目依赖关系、对构建时间的影响、网格中的详细属性,非常出色。
在 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)
Understand for C++可以帮助您:它构建了一个数据库,您可以从Perl访问。
cscope (http://cscope.sourceforge.net/) 可以在一个独立的 xterm 中运行,也可以在你最喜欢的编辑器中使用——它拥有出色的 emacs 和 vi/vim 支持。
#include
依赖关系的工具,例如cpp-dependencies、iwyu和dep-matrix,后者是一个用Python编写的相当简单的工具。 - nonsensickle