如何让 doxygen 创建跨多个项目的完整继承图?

问题描述 投票:0回答:1

当使用 doxygen 生成 C++ 继承图时,我注意到这些图可能不完整。

如果使用标签文件记录多个项目以允许交叉引用,doxygen将成功显示其他标签文件中存在的所有基类,但如果派生类位于其他标签文件中,它将不显示派生类。显示的派生类始终仅是当前项目中存在的类。

示例项目1代码:

class A {};

class B : public A {};

class C : public A {};

示例项目2代码:

#include <proj1.h>

class D : public A {};

class E : public A {};

class F : public E {};

项目 1 中的

A
的继承图,使用项目 2 中的标记文件 - 哪里是
D
E
F

显示了项目 2 中的

E
的继承图,使用项目 1 中的标记文件 - 父类
A

是否有设置告诉 doxygen 在使用标记文件时跨项目生成完整的继承图?

c++ oop inheritance doxygen
1个回答
0
投票

这里有一份全面的指南,详细介绍了如何使用 Doxygen 创建交叉引用多个项目的完整继承图。这是通过利用 Doxygen 的标签文件来实现的。

详细步骤

  1. 为每个项目生成 Doxygen 标记文件:标记文件是 Doxygen 用来在不同文档集之间创建链接的一种元数据。首先,您需要在每个项目上分别运行 Doxygen 以创建单独的标记文件:

例如,在项目目录中打开Doxyfile并设置以下参数:

GENERATE_HTML = NO
GENERATE_LATEX = NO
GENERATE_RTF = NO
GENERATE_MAN = NO
GENERATE_TAGFILE = myProj.tag
INPUT = /path_to

_您的项目文件/ 此配置将输出一个名为 myProj.tag 的文件,其中包含当前项目的类和文件的所有关系信息。对您的所有项目重复此操作。

  1. 不同项目之间的交叉引用:现在我们有了标签文件,我们可以将特定项目引用到其他项目。

例如,对于project1,您可以在 Doxyfile 中设置 TAGFILES 参数,如下所示:

GENERATE_HTML = YES
GENERATE_LATEX = NO
GENERATE_RTF = NO
GENERATE_MAN = NO
TAGFILES = /path_to_tag_files/project2.tag=/url_or_path_to_project2_documentation \
           /path_to_tag_f

iles/project3.tag=/url_or_path_to_project3_documentation 因此,每当您生成项目 1 的文档时,Doxygen 还将使用项目 2 和项目 3 的标记文件中的数据。

  1. 可视化继承图:要获得继承图的完整视图,请确保在 Doxyfile 中启用 Graphviz 的点工具。该工具创建基于图形的类之间关系的图表。

确保设置:

HAVE_DOT = YES
CLASS_DIAGRAMS = YES
CLASS_GRAPH = YES

这些设置确保 Doxygen 生成类的继承和协作图。

请记住,为了使交叉引用正常工作,每个项目都需要了解所有其他项目。因此,在为每个项目生成文档时,请务必在 TAGFILES 选项中列出每个项目的标签文件。

让我们看一下您的示例:

示例项目 1 代码:这里我们将相关类(A、B、C)分组到标题“项目 1”下。

/** @defgroup project1 Project 1
 *  This is the first group
 *  @{
 */
class A {};

class B : public A {};

class C : public A {};
/** @} */ // end of project1
Example project 2 code: Similarly, we group the classes (D, E, F) under "Project 2".

/** @defgroup project2 Project 2
 *  This is the second group
 *  @{
 */
#include <proj1.h>

class D : public A {};

class E : public A {};

class F : public E {};
/** @} */ // end of projec

在这些示例中,@defgroup 命令用于定义组,而 @{ 和 @} 命令用于关闭与该组关联的类。当您决定向群组添加更多成员类别时,@ingroup 命令会很方便。

我希望这可以帮助您和其他遇到此问题的人使用 Doxygen 跨多个项目生成完整的继承图!

© www.soinside.com 2019 - 2024. All rights reserved.