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

Dre*_*ann 13 c++ oop inheritance doxygen

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

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

示例项目1代码:

class A {};

class B : public A {};

class C : public A {};
Run Code Online (Sandbox Code Playgroud)

示例项目2代码:

#include <proj1.h>

class D : public A {};

class E : public A {};

class F : public E {};
Run Code Online (Sandbox Code Playgroud)

A项目1 的继承图,使用项目2中的标记文件 - 其中D,E&F

在此输入图像描述

E使用项目1中的标记文件 - 父类A显示项目2 的继承图.

在此输入图像描述

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

小智 1

这是一份全面的指南,详细介绍了如何使用 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_your_project_files/
Run Code Online (Sandbox Code Playgroud)

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

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

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

    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_files/project3.tag=/url_or_path_to_project3_documentation
Run Code Online (Sandbox Code Playgroud)

因此,每当您生成project1 的文档时,Doxygen 还将使用project2 和project3 标记文件中的数据。

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

确保设置:

    HAVE_DOT = YES
    CLASS_DIAGRAMS = YES
    CLASS_GRAPH = YES
Run Code Online (Sandbox Code Playgroud)

这些设置确保 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
Run Code Online (Sandbox Code Playgroud)

示例项目 2 代码:同样,我们将类(D、E、F)分组到“项目 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 project2
Run Code Online (Sandbox Code Playgroud)

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

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