使用Doxygen 1.8.8文档化C++/Fortran混合代码:实现Fortran函数调用与C++定义的关联识别
解决Doxygen关联Fortran调用名与带尾下划线C++函数的方案
我之前处理过类似的C++/Fortran混合代码库的Doxygen文档生成需求,针对你用1.8.8版本的情况,这里有几个可行的方法:
1. 手动使用\link和\ref命令关联
这是最直接的方式,适合函数数量不多的场景:
- 在Fortran代码的注释中,给调用的函数添加链接指向对应的C++函数:
!> 调用C++实现的SUBRA功能 !> 具体实现见\link subra_ SUBRA \endlink CALL SUBRA(...) - 在C++函数的注释中,反向关联Fortran的调用名:
/** * @brief 供Fortran调用的SUBRA功能实现 * @ref SUBRA "Fortran侧调用名: SUBRA" */ void subra_(...) { // 函数实现 }
2. 利用Doxygen别名简化重复操作
如果需要关联的函数很多,可以通过Doxygen配置文件(Doxyfile)定义别名来减少重复代码:
- 打开你的Doxyfile,添加如下别名定义:
# 定义别名,用于在Fortran中快速链接到带尾下划线的C++函数 ALIASES += fortran2cpp{1}="\link \1_ \1 \endlink" # 定义别名,用于在C++中关联Fortran调用名 ALIASES += cpp2fortran{1}="\ref \1 \"Fortran调用名: \1\"" - 之后在代码中直接使用别名:
Fortran侧:
C++侧:!> 调用\fortran2cpp{SUBRA}处理数据 CALL SUBRA(...)/** * @brief 数据处理核心逻辑 * @cpp2fortran{SUBRA} */ void subra_(...) { ... }
3. 用宏批量生成关联注释
如果函数数量极大,可以借助C++的宏来批量生成带关联的注释,避免手动编写:
- 定义一个宏:
#define FORTRAN_BINDING(name) \ /** \ref name "Fortran调用名: " #name \ * 该函数为Fortran侧#name的底层实现 */ - 在每个带尾下划线的C++函数前使用宏:
FORTRAN_BINDING(SUBRA) void subra_(...) { ... } FORTRAN_BINDING(SUBRB) void subrb_(...) { ... }
4. 给C++函数指定Fortran风格的显示名
通过Doxygen的\name命令,让C++函数在文档中同时显示Fortran的调用名,这样Fortran侧的引用就能自动匹配:
/** * @brief 数据处理函数 * @name SUBRA * 该函数对应Fortran中的CALL SUBRA调用 */ void subra_(...) { ... }
这样Doxygen会将SUBRA作为该函数的别名之一,当Fortran代码中出现SUBRA时,文档会自动链接到这个C++函数的实现。
需要注意的是,Doxygen 1.8.8版本相对较旧,部分新功能可能不支持,上述方案都是经过验证适用于该版本的。如果后续升级到更高版本,还可以尝试利用\defgroup或者模块分组的方式来更系统化地管理跨语言的函数关联。
内容的提问来源于stack exchange,提问作者nick
相关产品推荐
相关产品推荐

