在Visual Studio中显示C++文件的#include层次结构

Ric*_*dle 159 c++ include visual-studio

问题:我有一个大型的Visual C++项目,我正在尝试迁移到Visual Studio 2010.它是各种来源和不同年龄段的大量组合.我遇到了问题,因为有些事情包括winsock.hwinsock2.h.

问题:显示#includeVisual Studio C++源文件的层次结构有哪些工具和技术?

我知道cl /P获取预处理器输出,但是没有清楚地显示哪个文件包含哪些其他文件(在这种情况下/P输出为376,932行8-)

在一个完美的世界中,我想要分层显示哪些文件包含哪些其他文件以及行号,以便我可以跳转到源代码:

source.cpp(1)
  windows.h(100)
    winsock.h
  some_other_thing.h(1234)
    winsock2.h
Run Code Online (Sandbox Code Playgroud)

xto*_*ofl 221

有一个设置:

项目设置 - >配置属性 - > C/C++ - >高级 - >显示包含

这将生成树.它映射到编译器开关/ showIncludes

  • 注意:可以在"输出"窗口中看到层次结构. (19认同)
  • 如果有人感兴趣:即使您选择了Clang [平台工具集](http://msdn.microsoft.com/en-us/library/vstudio/ff770576(v = vs.100).aspx),您仍然可以"显示包括"如果你在`C/C++ - >命令行 - 附加选项`中添加`-H` (3认同)
  • 仍然不如gcc的"included from"功能,它显示了与编译时错误相关的直接包含层次结构,并且还显示了行号. (3认同)
  • ......并在构建日志中. (2认同)
  • 我做了一个快速的正则表达式,剥离了Visual Studio包含(程序文件(x86)下的任何东西).您可以将输出窗口复制+粘贴到像Notepad ++这样的应用程序中并执行正则表达式查找并替换为空白以从树中删除所有VS包含:`1>\s*注意:包括文件:\ s*C:\\ Program文件\(x86 \).*(\ r \n | \n | $)` (2认同)
  • 请注意,虽然可以为单个源文件切换/ showIncludes,但除非在项目级别设置/ showIncludes,否则它将无效. (2认同)

Kim*_*man 19

编译器还支持/ showIncludes开关 - 它不会为您提供行号,但可以提供一个非常全面的视图,其中包括来自哪里.

它位于项目设置 - >配置属性 - > C/C++ - >高级 - >显示包含下.


Col*_*ond 17

我们发现IncludeManager是一个非常强大的工具.它不是免费的(但并不昂贵),它让我们能够掌握我们的Include问题,并将编译时间从50分钟缩短到8分钟,修剪掉我们没有使用的大块包含.

  • 佑!我在有问题的文件上运行了IncludeManager,它产生了一个让我大笑的图表.根据我的计算,我需要一台400英寸的监视器才能看到整个事情.我认为我们无法提供帮助.8-) (5认同)
  • 更新 - IncludeManager 的母公司 ProFactor (www.profactor.co.uk) 已经停业,但从上述网站免费提供其最新版本。不利的一面是它仅适用于从 VS2005 到 VS2013 的完整版 Visual Studio。 (3认同)
  • IncludeManager 需要 Visual Studio.NET 2005 到 2013,因此几乎不再可用。 (2认同)

Pau*_*aul 5

不如gcc的分层包含功能,它在错误的情况下显示直线包含层次结构.VS中的"show includes"选项显示了所有内容,这在调试分层包含文件问题时是过度的.

  • 也许添加一些关于如何使用它的细节,文档在哪里等等?这个答案目前没有增加太多。 (2认同)

Fan*_*Fox 5

Visual Studio 现在有一个名为IncludeToolbox的插件。它可以列出您的依赖包含并执行更多操作,例如随机删除和编译以查看是否需要该包含。