当使用 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 在使用标记文件时跨项目生成完整的继承图?
这里有一份全面的指南,详细介绍了如何使用 Doxygen 创建交叉引用多个项目的完整继承图。这是通过利用 Doxygen 的标签文件来实现的。
详细步骤
例如,在项目目录中打开Doxyfile并设置以下参数:
GENERATE_HTML = NO
GENERATE_LATEX = NO
GENERATE_RTF = NO
GENERATE_MAN = NO
GENERATE_TAGFILE = myProj.tag
INPUT = /path_to
_您的项目文件/ 此配置将输出一个名为 myProj.tag 的文件,其中包含当前项目的类和文件的所有关系信息。对您的所有项目重复此操作。
例如,对于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 的标记文件中的数据。
确保设置:
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 跨多个项目生成完整的继承图!