【问题标题】:Subgroups with the same name in different groups不同组中具有相同名称的子组
【发布时间】:2023-10-25 19:55:01
【问题描述】:

我刚开始第一次使用 Doxygen,遇到了以下问题:我正在尝试创建多个具有相同名称的子组,如下所示:

- Group 1
    - Constructors
    - Other
- Group 2
    - Constructors
    - Other

我得到的是这样的:

- Group 1
    - Constructors
        - (Constructors both from Group 1 and 2)
    - Other
        - (Others from both Group 1 and 2)
- Group 2
    - Constructors
        - (Constructors both from Group 1 and 2)
    - Other
        - (Others from both Group 1 and 2)

我当前的代码如下所示(在单独的 .h 文件中)

/** @defgroup Group1
* Description for Group 1
*/
/** @defgroup Group2
* Description for Group 2
*/
/* @defgroup Constructors
* @ingroup Group1
*/
/* @defgroup Constructors
* @ingroup Group2
*/
/* @defgroup Other
* @ingroup Group1
*/
/* @defgroup Other
* @ingroup Group2
*/

/**
* @ingroup Group1
* @{
*/
 class Class1 {
     /**
     * @ingroup Constructors
     * @{
     */
     Class1();
     (other constructors)
     /** @}*/
     /**
     * @ingroup Other
     * @{
     */
      void Random();
      (other functions)
     /** @}*/
 }; /** @}*/
/**
* @ingroup Group2
* @{
*/
 class Class2 {
     /**
     * @ingroup Constructors
     * @{
     */
     Class1();
     (other constructors)
     /** @}*/
     /**
     * @ingroup Other
     * @{
     */
      void Random();
      (other functions)
     /** @}*/
 }; /** @}*/

我试图保持代码简短,但我希望我的问题仍然很清楚。 提前致谢!

【问题讨论】:

  • 我不知道 doxygen 但@ingroup Group 1 应该是@ingroup Group1吗?
  • 你说得对,我错过了子组的@defgroup 谢谢:)
  • 是的,给他们不同的名字和相同的标题
  • 我不太确定你的意思是什么?你能举个例子吗?
  • 我认为@Dóri 是正确的\defgroup 的语法是\defgroup <name> (group title) 有些使用不同的<name> 否则请给出一个完整的例子。哪个版本的 doxygen?

标签: c++ doxygen


【解决方案1】:

简答:

  • 确保在 doxygen 注释 (/**) 中声明组,而不仅仅是 C cmets
  • 组定义采用名称和标题。名称 (Constructors_1) 必须是全局唯一的,并充当标识符。标题(构造函数)是渲染的内容,不需要是唯一的。
  • 嵌套组可用于手动组织一些文档。然而,在一个类的 C++ 方法上这样做会适得其反,因为它会混淆 doxygen(请参阅下面的示例中第 1 组和第 2 组是如何被破坏的),这自然会用类来记录类的方法,而不是在其他地方。
  • 使用组将整个类(包含所有内容)或函数组织成几个子组,但不要试图将类分解成更小的部分。

长答案:

/** @file foo.cc
  Doxygen example.
*/

/** @defgroup Group1
* Description for Group 1
*/
/** @defgroup Group2
* Description for Group 2
*/
/** @defgroup Constructors_1 Constructors
  Constructors from group 1.
* @ingroup Group1
*/
/** @defgroup Constructors_2 Constructors
  Constructors from group 2.
* @ingroup Group2
*/
/** @defgroup Other_1 Other
  Misc from group 1.
* @ingroup Group1
*/
/** @defgroup Other_2 Other
  Misc from group 2.
* @ingroup Group2
*/

/** @defgroup Group3
* Description for Group 3
*/
/** @defgroup Stuff_3 Stuff
  Stuff.
* @ingroup Group3
*/
/** @defgroup More_stuff_3 More stuff
  More stuff.
* @ingroup Group3
*/

/**
* @ingroup Group1
* @{
*/
 class Class1 {
     /**
     * @ingroup Constructors_1
     * @{
     */
     /** This is Class1. */
     Class1();
     /** @}*/

     /**
     * @ingroup Other_1
     * @{
     */
     /** This is Random 1. */
      void Random();
     /** @}*/
 };
/** @}*/

/**
* @ingroup Group2
* @{
*/
 class Class2 {
     /**
     * @ingroup Constructors_2
     * @{
     */
     /** This is Class2. */
     Class2();
     /** @}*/

     /**
     * @ingroup Other_2
     * @{
     */
     /** This is Random 2. */
      void Random();
     /** @}*/
 };
/** @}*/

/**
* @ingroup Group3
* @{
*/

void init_group_3();

     /**
     * @ingroup Stuff_3
     * @{
     */
     /** This is some stuff. */
     void do_something_here();
     /** @}*/

     /**
     * @ingroup More_stuff_3
     * @{
     */
     /** This is more stuff. */
     void do_something_more_here();
     /** @}*/
 };
/** @}*/

使用 Doxygen 1.9.2 测试,第 3 组按预期工作,第 1 组和第 2 组无法正确呈现内容,因为手动将一个类的方法分配给另一个组。

【讨论】:

  • 感谢您的回答,但我最终只是编写了自己的文档工具。 3天左右完成
最近更新 更多