图和图表

Doxygen内置支持为C++类生成继承图。

Doxygen可以使用Graphviz中的“dot”工具生成更高级的图和图表。Graphviz是一个开源、跨平台的图绘制工具包,可在https://graphviz.cn/找到。

如果您的PATH(环境变量)中有“dot”工具,您可以在配置文件中将HAVE_DOT设置为YES,以便Doxygen使用它。

Doxygen使用“dot”工具生成以下图表:

  • 将绘制类层次结构的图形表示,以及文本表示。目前,此功能仅支持HTML。
    警告:当您有一个非常大的类层次结构,其中许多类都派生自一个共同的基类时,生成的图像可能会太大,以至于某些浏览器无法处理。
  • 将为每个文档化的类生成一个继承图,显示直接和间接的继承关系。这将禁用内置类继承图的生成。
  • 为每个至少包含一个其他文件的文档化文件生成一个包含依赖图。此功能目前仅支持HTML和RTF。
  • 还会生成一个反向包含依赖图,显示哪些其他文件包含某个(头)文件。
  • 为每个文档化的类和结构体绘制一个图,显示:
    • 与基类的继承关系。
    • 与其他结构体和类的使用关系(例如,类A有一个类型为类B的成员变量m_a,则A有一个指向B的箭头,标签为m_a)。
  • 如果CALL_GRAPH设置为YES,则为每个函数绘制一个图形调用图,显示该函数直接或间接调用的函数(另请参阅\callgraph\hidecallgraph)。
  • 如果CALLER_GRAPH设置为YES,则为每个函数绘制一个图形调用者图,显示直接或间接调用该函数的函数(另请参阅\callergraph\hidecallergraph)。
  • 如果DIRECTORY_GRAPH设置为YES,Doxygen将生成显示每个目录的目录依赖关系的图。图表将目录显示为框。子目录嵌套在其父目录的框中。图表的深度通过DIR_GRAPH_MAX_DEPTH配置。目录之间的包含依赖关系显示为箭头。

使用布局文件,您可以确定实际显示哪些图表。

选项DOT_GRAPH_MAX_NODESMAX_DOT_GRAPH_DEPTH可用于限制各种图表的大小。

HTML和RTF中的类图元素具有以下含义:

  • 黄色框表示一个类。框的右下角可以有一个小标记,表示该类包含隐藏的基类。对于类图,最大树宽度目前为8个元素。如果树更宽,则某些节点将被隐藏。如果框填充有虚线图案,则继承关系是虚拟的。
  • 白色框表示当前显示该类的文档。
  • 灰色框表示一个未文档化的类。
  • 实心深蓝色箭头表示公共继承。
  • 虚线深绿色箭头表示保护继承。
  • 点线深绿色箭头表示私有继承。

{\LaTeX}中的类图元素具有以下含义:

  • 白色框表示一个类。框右下角的标记表示该类有隐藏的基类。如果框有虚线边框,则表示虚拟继承。
  • 实线箭头表示公共继承。
  • 虚线箭头表示保护继承。
  • 点线箭头表示私有继承。

由dot工具生成的图表元素具有以下含义:

  • 白色框表示一个类、结构体或文件。
  • 带有红色边框的框表示一个节点,该节点具有比显示数量更多的箭头!换句话说:图表相对于该节点被截断。图表有时被截断的原因是为了防止图像变得过大。对于使用dot生成的图表,Doxygen会尝试将生成图像的宽度限制为1024像素。
  • 黑色框表示当前显示该类的文档。
  • 深蓝色箭头表示包含关系(对于包含依赖图)或公共继承(对于其他图)。
  • 深绿色箭头表示保护继承。
  • 深红色箭头表示私有继承。
  • 紫色虚线箭头表示“使用”关系,箭头的边沿用负责该关系的变量标记。如果类A有一个类型为C的成员变量m,其中B是C的子类型(例如,C可以是BB*T<B>*),则类A使用类B

目录依赖图中的元素具有以下含义:

  • 带有粗体边框的框表示生成目录依赖图的目录。
  • 带有红色实线边框的框表示其子目录未在图表中显示的目录(“截断”)。要配置在图表中显示的子目录的深度,请参阅DIR_GRAPH_MAX_DEPTH
  • 带有红色虚线边框的框表示其父目录也未在图表中显示的截断目录。
  • 带有除红色之外的虚线边框的框表示并非所有子目录都显示,但至少显示了一个子目录。
  • 带有浅灰色边框的框表示具有以下两个属性的目录:
    • 其父目录未显示。
    • 至少显示了一个子目录。
  • 无背景颜色的框表示一个目录,该目录不是源目录的父目录的子目录,这些父目录是显示的。源目录是显示目录依赖图的目录。
  • 两个框之间的箭头表示两个目录之间的包含依赖关系。如果一个目录中的文件包含另一个目录中的文件,则存在包含依赖关系。如果涉及包含依赖关系的目录未显示在图表中,则箭头将连接到显示的第一个父目录。此父目录显示为截断(如上所述)。

这里有一些头文件,它们共同展示了Doxygen可以生成的各种图表:

diagrams_a.h

#ifndef DIAGRAMS_A_H
#define DIAGRAMS_A_H
class A { public: A *m_self; };
#endif

diagrams_b.h

#ifndef DIAGRAMS_B_H
#define DIAGRAMS_B_H
class A;
class B { public: A *m_a; };
#endif

diagrams_c.h

#ifndef DIAGRAMS_C_H
#define DIAGRAMS_C_H
#include "diagrams_c.h"
class D;
class C : public A { public: D *m_d; };
#endif

diagrams_d.h

#ifndef DIAGRAM_D_H
#define DIAGRAM_D_H
#include "diagrams_a.h"
#include "diagrams_b.h"
class C;
class D : virtual protected A, private B { public: C m_c; };
#endif

diagrams_e.h

#ifndef DIAGRAM_E_H
#define DIAGRAM_E_H
#include "diagrams_d.h"
class E : public D {};
#endif

单击此处查看由Doxygen生成的相应HTML文档。请注意,EXTRACT_ALL = YES用于生成图表。

转到下一节或返回索引