前一篇博文中我曾仔细介绍过如何查看C/C++代码的依赖项关系图,在这篇文章中我将会介绍如何使用Visualization and Modeling Feature Pack 工具包,查看C/C++源代码的Include关系图,这个功能是针对C/C++编程语言本身的特性而新加入的。在这里我依然会使用工程Hilo 作为案例,展示如何以图形化的方式显示工程中源代码文件与头文件之间Include关系。 
首先,在Visual Studio下打开工程Hilo,在菜单栏中选择菜单“体系结构->生成依赖关系图->By Include File”

第一次操作时,有时我们将会发现一个名为“Analyzing Files”的进度框会跳出,提示用户“代码正在解析中”,如图:

稍等片刻后,如下的DGML有向图将会生成,这张图除了展示工程Browser和Common内部源文件与头文件的Include关系外,还显示了工程之间,工程与外部头文件的Include引用关系。 

下面我将会使用自顶向下的方式给您解释如何去阅读和分析这张图。点击该图右键菜单”分组->全部折叠”,我们将会得到下图:

这张图很清晰地告诉我们在当前解决方案中包含2个C++工程,分别是Browser和Common。Browser���包含61个源文件/头文件,而 Common中源文件/头文件的数量是29。工程Browser中的源文件Include了工程Common和”外部”中的头文件,而工程Common仅仅Include了“外部”中的头文件。这里的browser.vcxproj和common.vcxproj比较容易理解,分别包含了这两个工程中所有的源文件和头文件,而在”外部”这个结点中,则包括了所有被工程Browser和common所Include,但不属于这两个项目的头文件.让我们展开”外部”节点, 我们发现其中包含2个名为“Windows SDK”和”C/C++Standard Library”的子节点,如图:

为了区分不同库的头文件,我们根据头文件所属领域的不同,我们将外部引用的头文件分为两类:“Windows SDK”和“C/C++ Standard Library”。节点“Windows SDK”下包含存储路径在“%WindowsSdkDir%\include”下的头文件,而节点“C/C++ Library”下的头文件的存储路径为“%VSINSTALLDIR%\vc\include”。在这里,工程Browser和Common Include的总共引用了“Window SDK”的13个头文件,工程Browser和Common,以及“Windows SDK”库引用了“C/C++ Standard Library”的 12个头文件。 
从上面的图中,我们可以了解到整个解决方案的Include依赖关系图的结构。然而,这个图中有如此多的节点,我们如何来查看我们想要了解的某一个或一些文件的Include依赖关系呢?首先,我们可以通过Ctrl+F来找到我们想要找到的文件。按下Ctrl+F,然后输入 “carouselpane.h”, Visual Studio将自动帮我们定位到所在的节点(如下图),同时与该链接相连的所有链接将会被高亮,链接箭头方向代表Include关系,如图:

源文件“carouselpane.cpp”include了头文件”carouselpane.h”,在图中将会有条始于节点 “carouselpane.cpp”,终于节点“carouselpane.h”的有向链接。停留鼠标在该链接上,显示“导向按钮”,点击“导向按钮” 中的“+”,我们将会被带到源代码文件”CarouselPane.cpp”

在源代码文件”carouselpane.cpp”中,代码行#include “CarouselPane.h”被自动选中,这个操作诠释了源文件“carouselpane.cpp”与“carouselpane.h”的 Include关系。点击右键菜单“查看内容”,头文件“carouselpane.h”将会被打开,

在打开的头文件“carouselPane.h”中,点击右键菜单“Generate Graph of Include Files”,一张关于头文件carouselPane.h Include”和Include By的依赖图将会产生,如下图:

该图所表达的语义是工程Browser下“Carouselpane.h”头文件被3个.cpp文件Include的,并且该文件Include了 8个.h文件。 这样,通过这样的子图,我们就能够比较方便地看到某个文件的Include和Include By依赖关系图了。

总结: 
“Include”依赖图提供了一种以图形化方式显示源文件与头文件间“Include”关系的方式,基于解决方案生成的“Include”图可以帮我们理解工程间以及工程与库头文件的“Include”关系,而基于单个文件的“Include”图可以帮我们进一步理解单个文件的“Include”和 “Include By”依赖关系。

from:http://blogs.msdn.com/b/almcppcn/archive/2010/08/13/pound-include-dependency-graph-from-cpp-source-codes.aspx

C/C++源代码的Include依赖关系图的更多相关文章

  1. Ambari服务依赖关系图生成脚本

    1. 生成服务依赖关系 #!/usr/bin/python import sys import commands import json def genDependString(ip): url=&q ...

  2. Intellij IDEA 中如何查看maven项目中所有jar包的依赖关系图(转载)

    Intellij IDEA 中如何查看maven项目中所有jar包的依赖关系图 2017年04月05日 10:53:13 李学凯 阅读数:104997更多 所属专栏: Intellij Idea   ...

  3. Intellij IDEA 中如何查看maven项目中所有jar包的依赖关系图

    Maven 组件界面介绍 如上图标注 1 所示,为常用的 Maven 工具栏,其中最常用的有: 第一个按钮:Reimport All Maven Projects 表示根据 pom.xml 重新载入项 ...

  4. rpmgraph - 显示 RPM 软件包依赖关系图

    SYNOPSIS rpmgraph PACKAGE_FILE ... DESCRIPTION rpmgraph 使用 PACKAGE_FILE 参数来产生一个软件包依赖关系图.每个 PACKAGE_F ...

  5. 使用 p4-graphs 命令将p4程序依赖关系图形化

    位置:/home/wasdns/p4factory/targets/l2_switch/p4src 命令: cd /home/wasdns/p4factory/targets/l2_switch/p4 ...

  6. MyBatis源码分析(1)——整体依赖关系图

    后续补充更新

  7. SpringMvc+Spring+Mybatis的jar包依赖关系图

  8. makefile 自动处理头文件的依赖关系 (zz)

    现在我们的Makefile写成这样: all: main main: main.o stack.o maze.ogcc $^ -o $@ main.o: main.h stack.h maze.hst ...

  9. Chromium之工程依赖关系.

    Chromium各版本可能有差异,我的版本是chromium.r197479,2013/08前后下载的source code. Visual Studio Ultimate版本有工具可以自动生成项目依 ...

随机推荐

  1. xstream对象xml互转

    1.引入jar包 xpp3_min-1.1.4c.jarxstream-1.4.8.jar 2.建立java bean package com.jdw.bean; import java.util.A ...

  2. Linux上配置Nginx+PHP5(FastCGI)

    原为地址:http://www.laruence.com/2009/07/28/1030.html Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,以事件驱动的方式编写,所以有非常好的性能,同时 ...

  3. GDAL库——读取图像并提取基本信息

    GDAL库是一个跨平台的栅格地理数据格式库,包括读取.写入.转换.处理各种栅格数据格式(有些特定的格式对一些操作如写入等不支持).它使用了一个单一的抽象数据模型就支持了大多数的栅格数据.这里有GDAL ...

  4. Android下EditText中的字体不统一问题

    Android下EditText中的字体不统一问题 好久没写,今天心情好略记下解决的某bug 在一个登录界面有帐号和密码两个EditText,但是却发现两个EditText的hint的英文字体不同,看 ...

  5. 第3.3.4节 创建高级图形之RenderScript(二)

        Android视图框架对于创建复杂布局非常方便.然而,这种便利是以性能为代价的.当性能至关重要的时候,Android提供了几种更强大的图形处理能力,当然难度也是随之上升了.在本节中,我将介绍: ...

  6. Java webservice

    webservice:     就是应用程序之间跨语言的调用    1.xml    2.    wsdl: webservice description language web服务描述语言     ...

  7. Windows去掉桌面SVN文件或文件夹问号

    将版本库 的内容检出 到桌面,后才发现桌面上的文件 都变成了问号,本来也以为没有多大问题,删除 .svn 即可,可是删除所有的.svn后,桌面上还是显示问号,刷新了很多次,还重启电脑 了,问号也没有消 ...

  8. Python学习笔记10-Python MysqlHelper ,MySql 辅助类

    自己写了一个MySql辅助类,有需要的拿走: #--encoding:utf-8-- # import MySQLdb class MySQLHelper: myVersion=0.1 def __i ...

  9. 配置文件的读取添加webconfig

    webconfig.xml的配置文件内容挺丰富的,在这篇文章里笔者只对AppSettings这个节点进行配置文件读取和添加 public class ConfigurationRef { /// &l ...

  10. SharePoint 2013 代码实现自定义的站点模版创建Site Collection

    先需要将自定义的站点模版从网站集转移到Farm中. 找一个自己已经完成配置及设计的网站,在网站设置里面选择另存为模版.要注意的是不是所有的站点类型都有另存为模版的功能. 存完之后可在解决方案库的界面里 ...