31

是否可以在 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 选项,但看不到任何可以启用(或阻止)定义文档的东西。

4

4 回答 4

45

对的,这是可能的。Doxygen 文档说:

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

/*! \file */

或一个

/** @file */

此文件中的行。

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

多西文件

# Empty file.

测试.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();
};

/** @} */

酒吧.h

/** @file */

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

在这种情况下,TEST_DEFINE文档出现在HTML 输出的Files选项卡下的Test.h条目中,而等定义与 class和 function一起出现在 Modules 选项卡的Test Group下。TEST_AAAFooBar

需要注意的一件事是,如果您将文件名放在@file命令之后,例如:

/** @file Test.h */

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

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

我希望这有帮助!

于 2010-03-01T15:13:43.380 回答
5

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

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

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

于 2010-04-30T21:22:46.790 回答
3

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

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

于 2010-03-01T14:23:47.827 回答
2

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

于 2018-01-02T15:55:35.460 回答