如何在C语言Doxygen别名中使用动态名称?
在Doxygen别名中使用动态名称的实现方案
当然可以实现这种动态名称的需求,核心思路是利用Doxygen的文件级自定义变量结合别名定义,让每个C/H文件通过@unitname设置专属的单元名称,后续的别名可以直接引用这个变量生成动态内容。
步骤1:在Doxyfile中配置别名
首先修改你的Doxygen配置文件(Doxyfile),添加两个别名定义:
- 定义
@unitname别名,用于设置当前文件的单元名称变量:
ALIASES += "unitname{1}=\set{UNIT_NAME}{\\1}"
这里\set{UNIT_NAME}{\\1}的作用是把你传入的参数(比如unit1)存储到名为UNIT_NAME的文件级变量中,注意反斜杠需要转义成\\。
- 定义
@callback别名,引用之前设置的UNIT_NAME变量生成动态名称:
如果只是要输出格式化的文本(比如加粗的函数名),可以用:
ALIASES += "callback{1}=\b \{UNIT_NAME\}_\\1"
如果需要生成指向对应函数的链接(比如\ref命令),可以调整为:
ALIASES += "callback{1}=\\ref \{UNIT_NAME\}_\\1 \"\{UNIT_NAME\}_\\1 回调函数\""
这里的\{UNIT_NAME\}是引用之前设置的变量,转义大括号是为了避免Doxygen把它解析成别名的参数占位符。
步骤2:在C/H文件中使用
在每个文件的头部先用@unitname设置专属的单元名称,之后就能用@callback生成动态内容了。
示例1:unit1.h文件
/** * @file unit1.h * @unitname{unit1} * @brief 单元1的功能头文件 */ /** * @callback{Init} * @brief 初始化单元1的回调函数,实际对应函数名 unit1_Init */ typedef void (*unit1_Init)(void); /** * @callback{GetName} * @brief 获取单元1名称的回调函数,实际对应函数名 unit1_GetName */ typedef const char* (*unit1_GetName)(void);
示例2:unit2.h文件
/** * @file unit2.h * @unitname{unit2} * @brief 单元2的功能头文件 */ /** * @callback{Init} * @brief 初始化单元2的回调函数,实际对应函数名 unit2_Init */ typedef void (*unit2_Init)(void);
关键注意事项
- 版本兼容性:
\set命令是Doxygen 1.8.13及以上版本才支持的,如果你的版本较旧,可以用\def定义宏,但\set的优势是变量作用域仅限于当前文件,不同文件的设置不会互相干扰,完全符合你的需求。 - 转义规则:在Doxyfile的别名定义中,所有反斜杠都需要转义为
\\,变量引用的大括号也要用\{和\}转义,否则会被Doxygen错误解析。 - 变量作用域:通过
\set设置的UNIT_NAME是文件级变量,同一个文件内后续的所有@callback都会使用这个值,切换文件后需要重新用@unitname设置。
内容的提问来源于stack exchange,提问作者Mikael
相关产品推荐
相关产品推荐

