Doxygen条件编译不会产生文档

时间:2011-10-12 20:58:00

标签: doxygen conditional-compilation

我是doxygen的初学者,正在记录C程序

部分代码是:

\#include "options.h"
// options.h contains
\#define VAL0 0   // Possible values for PARAM
\#define VAL1 1
\#define PARAM VAL0

// Here's the conditional compilation
\#if (PARAM == VAL0)
// code chunk, which doesn't get compiled by Doxygen
\#endif

代码按照预期编译GCC,但我没有得到Doxygen文档

好的,Doxygen不会扩展宏,所以我尝试了:

\#define SYMEQ(A, B) (A == B) ? 1 : 0

\#if SYMEQ(PARAM, VAL0)

// code chunk

\#endif

设置Doxygen:

MACRO_EXPANSION = YES

EXPAND_ONLY_PREDEF = YES

没有预定义的宏

EXPAND_AS_DEFINED = SYMEQ

条件部分没有doxygen输出,只是由它决定

我也尝试过EXPAND_AS_DEFINED SYMEQ(A,B)

也没有运气

我找到了一些简单名称的例子,然后#ifdef NAME \ code #endif,但没有宏功能

2 个答案:

答案 0 :(得分:2)

我刚遇到问题#ifdef CONDITION \code not compiled by doxygen\ #endif并通过蛮力修复它,即手动将条件附加到设置PREDEFINED=CONDITION1 CONDITION2 ...

我尝试了头文件解决方案 - 生成一个包含条件的文件,并通过设置SEARCH_INCLUDESINCLUDE_PATHINCLUDE_FILE_PATTERNS来包含它 - 但它不起作用。从doxygen manual开始,我认为它需要在源文件中明确#include "the condition file",这意味着要修改源代码,所以我放弃了。

  

<强> SEARCH_INCLUDES:   如果SEARCH_INCLUDES标记设置为YES(默认值),则在搜索到#include时将搜索INCLUDE_PATH(见下文)中的包含文件。

答案 1 :(得分:1)

MACRO_EXPANSIONEXPAND_ONLY_PREDEF仅控制是否在代码中展开宏,而不是在条件预处理程序块中如何计算宏。例如,如果您的代码如下:

#define RET_TYPE int

/**
 * Some function
 */
RET_TYPE func(void);

使用MACRO_EXPANSION=NO,这将由doxygen记录为RET_TYPE func(void),宏不会扩展。使用MACRO_EXPANSION=YES时,会将其记录为int func(void),扩展宏并记录生成的签名。

要控制条件代码,您需要关注ENABLE_PREPROCESSING。如果此选项设置为NO,则将忽略条件代码,并记录条件中的所有代码。如果将其设置为YES,则将评估条件代码,并且仅记录条件匹配的块。在这种情况下,您需要确保正确定义所有正在评估的值,这可以通过允许doxygen评估包含文件来实现(请参阅SEARCH_INCLUDESINCLUDE_PATH和{{1通过预定义宏来获得特定值(请参阅INCLUDE_FILE_PATTERNS)。