如何让Doxygen收集并分别文档化#ifdef分支下的所有函数与宏
如何让Doxygen收集并分别文档化#ifdef分支下的所有函数与宏
嘿,我之前也碰到过一模一样的需求,要让Doxygen把C和C++分支里的函数、宏都单独生成文档,给你两个实用的方案:
方案一:修改Doxygen配置,让它同时解析两个分支
这个方法不用动太多代码,主要靠配置Doxygen的预处理器:
- 打开你的Doxygen配置文件(一般叫
Doxyfile),找到PREDEFINED选项,把它改成:
同时确保下面这几个选项是开启的:PREDEFINED = __cplusplus=1 DOXYGEN_PARSE_C=1ENABLE_PREPROCESSING = YES MACRO_EXPANSION = YES EXPAND_ONLY_PREDEF = YES - 然后把代码里的
#else改成#elif !defined(DOXYGEN_PARSE_C),这样正常编译时C和C++的分支逻辑不受影响,但Doxygen处理时会同时触发两个分支,把四个元素都解析到。修改后的代码大概是这样:#ifdef __cplusplus /// myfuncA void myfuncA(); /// MYMACRO_A #define MYMACRO_A() \ myfuncA(); #elif !defined(DOXYGEN_PARSE_C) /// myfuncB void myfuncB(); /// MYMACRO_B #define MYMACRO_B() \ myfuncB(); #endif
方案二:用Doxygen命令手动声明文档
如果不想改配置或者代码结构,也可以直接用Doxygen的@fn和@def命令,手动把所有要文档化的函数和宏都声明一遍:
/** * @fn void myfuncA() * @brief C++环境下的函数myfuncA * @details 这里可以写myfuncA的详细功能说明 */ /** * @def MYMACRO_A() * @brief C++环境下的宏MYMACRO_A * @details 宏的具体作用说明 */ /** * @fn void myfuncB() * @brief C环境下的函数myfuncB * @details 这里写myfuncB的详细功能说明 */ /** * @def MYMACRO_B() * @brief C环境下的宏MYMACRO_B * @details 宏的具体作用说明 */ // 原有的分支代码完全不变 #ifdef __cplusplus void myfuncA(); #define MYMACRO_A() \ myfuncA(); #else void myfuncB(); #define MYMACRO_B() \ myfuncB(); #endif
这种方法的好处是不用调整编译逻辑和Doxygen配置,直接通过注释命令告诉Doxygen要收集哪些内容,每个元素的文档也能写得更细致。
两种方法都能实现你的需求,看你更倾向哪种啦~
备注:内容来源于stack exchange,提问作者Anti Earth
相关产品推荐
相关产品推荐

