【问题标题】:Documenting preprocessor defines in Doxygen在 Doxygen 中记录预处理器定义
【发布时间】:2011-01-22 07:17:00
【问题描述】:

是否可以在 Doxygen 中记录预处理器定义?我希望能够像变量或函数一样执行此操作,但是 Doxygen 输出似乎“丢失”了定义的文档,并且也不包含定义本身。

我尝试了以下

/**My Preprocessor Macro.*/
#define TEST_DEFINE(x) (x*x)

/**@def TEST_DEFINE

   My Preprocessor Macro.
*/
#define TEST_DEFINE(x) (x*x)

我还尝试将它们放在一个组中(尝试了 defgroup、addtogroup 和 ingroup),而不是仅仅放在“文件范围”,但这也没有效果(尽管该组中的其他项目已按预期记录)。

我查看了各种 Doxygen 选项,但没有看到任何可以启用(或阻止)定义文档的内容。

【问题讨论】:

    标签: c++ c-preprocessor doxygen


    【解决方案1】:

    是的,这是可能的。 Doxygen documentation 说:

    记录全局对象(函数、typedef、枚举、宏等), 您必须记录定义它们的文件。换一种说法, 至少必须有一个

    /*! \file */

    或者一个

    /** @file */

    此文件中的行。

    您可以使用@defgroup@addtogroup@ingroup 将相关项目放入同一个模块中,即使它们出现在单独的文件中(有关详细信息,请参阅文档here)。这是一个适用于我的最小示例(使用 Doxygen 1.6.3):

    Doxyfile

    # Empty file.
    

    Test.h

    /** @file */
    
    /**My Preprocessor Macro.*/ 
    #define TEST_DEFINE(x) (x*x) 
    
    /**
     * @defgroup TEST_GROUP Test Group
     *
     * @{
     */
    
    /** Test AAA documentation. */
    #define TEST_AAA (1)
    /** Test BBB documentation. */
    #define TEST_BBB (2)
    /** Test CCC documentation. */
    #define TEST_CCC (3)
    /** @} */
    

    Foo.h

    /** @file */
    
    /**
     * @addtogroup TEST_GROUP
     *
     * @{
     */
    
    /** @brief My Class. */     
    class Foo {
        public:
            void method();
    };
    
    /** @} */
    

    Bar.h

    /** @file */
    
    /**
     * @ingroup TEST_GROUP
     * My Function.
     */
    void Bar();
    

    在这种情况下,TEST_DEFINE 文档出现在 HTML 输出的 Files 选项卡下的 Test.h 条目中,TEST_AAA 等定义与类 Foo 和函数 Bar 一起出现在 Modules 选项卡的 Test Group 下。

    需要注意的是,如果你把文件名放在@file 命令之后,例如:

    /** @file Test.h */
    

    那么这必须与文件的实际名称相匹配。如果没有,则不会生成文件中项目的文档。

    如果您不想添加 @file 命令,另一种解决方案是在 Doxyfile 中设置 EXTRACT_ALL = YES

    我希望这会有所帮助!

    【讨论】:

    • 这是否意味着无法将它们放入组/模块中?这就是我真正想要做的,以便它们与它们相关的函数/类/等一起(也分布在几个文件中)。
    • 嗨 Fire Lancer,我已经在我的答案中添加了一些关于分组的细节
    • 好的,我让它在 addtogroup 或 defgroup 块中工作。 ingroup 似乎在某处松散了定义(defgroup 与组主文档位于 .cpp 中,除了标题中的定义之外的所有内容都被放入组中)......我猜这一定是某种错误在 Doxygens 部分?
    • 很好奇。我尝试了您描述的设置,对我来说效果很好。如果没有看到您的代码,很难知道该建议什么。
    【解决方案2】:

    在我的“C”文件中,我使用如下注释格式和#define 行:

    /** @brief Number of milli-seconds to wait*/
    #define kTimeoutMSec (2)
    

    我的 html 文档最终包含我指定的文档。 (我确实在文件顶部有 @file 并且 EXTRACT_ALL=YES)

    【讨论】:

      【解决方案3】:

      尝试设置 EXTRACT_ALL 选项,我在我的项目中设置了该选项,它会为#defines 生成文档。在不使用 EXTRACT_ALL 的情况下可能有一种更优雅的方法,因此请务必查看文档

      http://www.doxygen.nl/config.html#cfg_extract_all

      【讨论】:

        【解决方案4】:

        除了前面的答案,还需要在 Doxyfile 上有ENABLE_PREPROCESSING=YES

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-12-03
          • 2016-10-04
          • 1970-01-01
          • 2015-08-28
          • 2018-06-18
          • 2012-11-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多