我是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,但没有宏功能
答案 0 :(得分:2)
我刚遇到问题#ifdef CONDITION \code not compiled by doxygen\ #endif
并通过蛮力修复它,即手动将条件附加到设置PREDEFINED=CONDITION1 CONDITION2 ...
。
我尝试了头文件解决方案 - 生成一个包含条件的文件,并通过设置SEARCH_INCLUDES
,INCLUDE_PATH
和INCLUDE_FILE_PATTERNS
来包含它 - 但它不起作用。从doxygen manual开始,我认为它需要在源文件中明确#include "the condition file"
,这意味着要修改源代码,所以我放弃了。
<强> SEARCH_INCLUDES:强> 如果SEARCH_INCLUDES标记设置为YES(默认值),则在搜索到#include时将搜索INCLUDE_PATH(见下文)中的包含文件。
答案 1 :(得分:1)
MACRO_EXPANSION
和EXPAND_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_INCLUDES
,INCLUDE_PATH
和{{1通过预定义宏来获得特定值(请参阅INCLUDE_FILE_PATTERNS
)。