doxygen
doxygen
ZEROKO14详细介绍doxygen的基本到进阶用法
文档生成工具方案盘点
Doxygen: (直接生成.html)简单可用
Doxygen(生成.xml)+ 前端工具(由.xml生成html,例如 docsforge)
基于clang解析(Standardese/Hdoc/Cldoc):不一定提供latex=>pdf
Sphinx: 需要手写独立的.rst文件,再生成,不好维护
.md转html(MkDocs/Docusaurus):需要手写独立的.md文件,再生成
Doxygen+Sphinx组合:需要进一步搭配Breathe,或定制开发的工具
最方便简单无痛使用的到头来还就是Doxygen
Doxygen
Doxygen 是一个文档生成工具,用于为源码生成说明文档。我们可以在代码中按照 Doxygen 要求的语法编写代码注释,然后使用 Doxygen 将程序中的注释提取出来生成一个文档。我们一般都把注释写在代码中,所以使用 Doxygen 生成的文档也能够非常方便地更新。Doxygen 还会在文档中引用源码文件,故我们也可在文档中方便地查看源码。
Doxygen 实际上是为C++编写的标准的文档生成工具,它可以从C++源码中提取文档。除了 C++,还支持 C、Objective-C、C#、PHP、Java,、Python、IDL (Corba,Microsoft, 和 UNO/OpenOffice flavors)、Fortran、VHDL、Tcl、以及D语言。
Doxygen支持Windwos,Linux,macOS
以mac安装为例:
官网上download下载到的是界面版,不带命令行工具
[可选] 通过 brew install doxygen 安装doxygen命令工具
生成文档流程
- Project name/Project synopsis/Project version or id均会显示到生成的网页中
Expert专家模式中记录常用设置流程
- Project->OUTPUT_LANGUAGE:Chinese
- SHOW_USED_FILES:EXTRACT_ALL:true 即使没有注释也会提取,但是不包含私有,静态等实体,这些也需要手动开启
- SHOW_USED_FILES:false 取消某处文件位置显示
- HTML->DISABLE_INDEX:true 关掉顶部导航栏
- HTML->GENERATE_TREEVIEW:true 生成侧边栏的树状图
理解
doxygen中的实体:类,函数,甚至函数的参数所有一切均视为实体
简单理解流程,图中列的输出项并不全
注释写法
这里列一套做法:
与代码同行的注释类型
1
2
3
4/*!< ... 批注 ... */
/**< ... 批注 ... */ (推荐)
//!< ... 批注 ...
///< ... 批注 ... (推荐)在代码上方的注释类型
1
2
3
4
5
6
7
8
9
10
11/*!
* ... text ...
*/
/**
* ... txt ...
*/
///
/// ... txt ... (推荐)
///其它不想被包含到文档里的注释
1
2
3
4// ... text ...
/* ... text ... */一种常用的注释格规范(一般放在函数、对象、结构体的定义前面)
1
2
3
4
5
6
7/**
* @brief 表示具体描述说明
* @param 表示参数说明,有@param、@param[in]和@param[out]三种写法,字面意思
* @return 表示返回参数
* @see 表示另见See also,多用在存在继承关系上,\n
比如A继承了B,但是A没有重写继承来的方法C,在C上就可以注释另见B
*/
常用注释命令
详解(下面的@均可替换为\)
1 | @exception <exception-object> {exception description} 对一个异常对象进行注释。 |
一般在头文件中放置不太会发生变化的注释
在源文件中使用一些易发生变化的注释
相关插件
Doxygen Documentation Generator 自动补全注释模板
Auto Comment Blocks 自动补全注释符号,可以和上面搭配使用于单行注释
进阶用法
函数关系图
Linux环境下采用CodeViz+GraphViz+gcc可以自动生成函数调用关系
Windows环境下有很多方法
vs有自动生成函数调用功能关系图的工具(社区版不够用)
开源利器SI(source insight)
SI生成的调用关系图中,当两个函数调用同一个底层函数时,该底层函数会分别出现在两个函数调用图的下面,因此这种方法也不能最快的看出那些经常被调用的底层函数
自动生成函数调用关系图Doxygen+GraphViz+HtmlHelp
