Doxygen条件编译不生成文档

Doxygen条件编译不生成文档,doxygen,conditional-compilation,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 does

我是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
设置氧发生器:

宏扩展=是

仅展开\u PREDEF=是

没有预定义的宏

按定义展开=SYMEQ

没有来自条件部分的强氧输出,仅限于它

我还尝试按SYMEQ(A,B)的定义扩展

也没有运气


我发现了一些简单名称的示例,然后是#ifdef NAME\code#endif,但没有一个具有宏函数

宏扩展
仅扩展(u PREDEF
仅控制是否在代码中扩展宏,而不是在条件预处理器块中如何计算宏。例如,如果您有如下代码:

#define RET_TYPE int

/**
 * Some function
 */
RET_TYPE func(void);
使用
MACRO\u EXPANSION=NO
,这将由doxygen记录为
RET\u TYPE func(void)
,宏不会展开。使用
MACRO\u EXPANSION=YES
,这将被记录为
int func(void)
,宏将被展开,生成的签名将被记录


要控制条件代码,您需要关注
ENABLE_PREPROCESSING
。如果此选项设置为
NO
,则条件代码将被忽略,条件内的所有代码都将被记录。如果设置为
YES
,则将对条件代码进行计算,并且只记录条件匹配的块。在这种情况下,您需要确保所有被评估的值都被正确定义,这可以通过允许doxygen评估包含文件(请参阅
搜索包含
包含路径
包含文件模式
选项)或通过预定义宏以具有特定值来实现(请参见预定义的)。

宏扩展
仅扩展(PREDEF)仅控制是否在代码中扩展宏,而不是在条件预处理器块中如何计算宏。例如,如果您有如下代码:

#define RET_TYPE int

/**
 * Some function
 */
RET_TYPE func(void);
如果使用
MACRO\u EXPANSION=NO
,doxygen会将其记录为
RET\u TYPE func(void)
,则宏不会展开。如果使用
MACRO\u EXPANSION=YES
,则会将其记录为
int func(void)
,则会展开宏并记录生成的签名


要控制条件代码,您需要关注
启用预处理
。如果此选项设置为
,则将忽略条件代码,并记录条件中的所有代码。如果设置为
,则将计算条件代码,并且仅计算条件匹配的块在这种情况下,您需要确保所有被评估的值都定义正确,这可以通过允许doxygen评估包含文件来实现(请参阅
搜索包含
包含路径
包含文件模式
选项),或通过预定义宏以使其具有特定值(请参见
预定义的
)。

我刚刚遇到了问题
#ifdef CONDITION\code不是由doxygen\#endif编译的,并通过蛮力将其修复,即手动将条件附加到设置
预定义的=CONDITION1 CONDITION2…

我尝试了头文件解决方案——通过设置
SEARCH\u INCLUDES
include\u PATH
include\u file\u PATTERNS
,生成一个带有条件的文件并将其包含在内,但它没有起作用。从
在源文件中,这意味着要修改源代码,所以我放弃了

搜索\u包括: 如果SEARCH#INCLUDES标记设置为YES(默认值),则如果找到一个#INCLUDE,将搜索INCLUDE#路径(见下文)中的INCLUDES文件


我刚刚遇到了doxygen\#endif未编译的问题
#ifdef CONDITION\code
,并用蛮力解决了它,即手动将条件附加到设置
预定义=条件1条件2…

我尝试了头文件解决方案——通过设置
SEARCH\u INCLUDES
include\u PATH
include\u file\u PATTERNS
,生成一个带有条件的文件并将其包含在内,但它没有起作用。从
在源文件中,这意味着要修改源代码,所以我放弃了

搜索\u包括: 如果SEARCH#INCLUDES标记设置为YES(默认值),则如果找到一个#INCLUDE,将搜索INCLUDE#路径(见下文)中的INCLUDES文件