API文档生成工具——Doxygen
来源:互联网 发布:阿里云 健康管理平台 编辑:程序博客网 时间:2024/05/19 12:16
1 简介
为代码写注释一直是大多数程序员有些困扰的事情。更头痛的是写文档,以及维护文档的问题,而doxygen就能把遵守某种格式的注释自动转化为对应的文档。
Doxygen是基于GPL的开源项目,是一个非常优秀的文档系统,当前支持在大多数unix(包括linux),windows家族,Mac系统上运行,完全支持C++, C, Java, IDL(Corba和Microsoft 家族)语言,部分支持PHP和C#语言,输出格式包括HTML、latex、RTF、ps、PDF、压缩的HTML和unix manpage。有很多开源项目(如log4cpp和CppUnit)都使用了doxygen文档系统。
2 Doxygen配置文件
2.1 生成Doxygen配置文件
运行Doxywizard创建配置文件。可以直接点“Save…”按钮,将保存默认的配置文件,名为Doxyfile,内容是Doxygen的默认设置。Doxyfile是普通文本文件,可以直接打开手动编辑。不过在Doxywizard的界面上填写也很方便,每个参数都有详细提示。建议用Doxywizard完成第一次设置。以后如果需要调整个别参数,可以直接编Doxyfile。
上述Doxywizard界面中提供了生成Doxygen文档的4个步骤,按照上述步骤一步步执行就可以生成漂亮的文档了。
第一步是生成配置文件,提供三种方式:
- Wizard方式指简约方式,在其中只提供一些重要的参数设置,其余的均为默认值;
- Expert方式为详细设置方式,通过该选项可以详细地配置Doxygen的各个配置项;
- Load方式,用于导入以前生成的Doxygen配置文件,导入后可以再点击Expert进行修改。
2.2 配置选项含义详解
3 Doxygen的注释风格
3.1 综述
在每个代码项中都可以有两类描述, 这两类描述将在文档中格式化在一起: brief描述和detailed。 两种都是可选的,但不能同时没有。,简述(brief)就是在一行内简述地描述。而详细描述(detailed description)则提供更长, 更详细的文档。
Doxygen支持c风格注释、c++风格注释以及javaDoc风格注释等,下面将分别予以介绍。
若需要通过Doxygen生成漂亮的文档,一般有如下几个地方需要使用Doxygen支持的风格进行注释:
- 文件头(包括.h和.cpp)
主要用于声明版权,描述本文件实现的功能,以及文件版本信息等 - 类的定义
主要用于描述该类的功能,同时也可以包含使用方法或者注意事项的简要描述 - 类的成员变量定义
在类的成员变量上方,对该成员变量进行简要地描述 - 类的成员函数定义
在类定义的成员函数上方,对该成员函数功能进行简要描述 - 函数的实现在函数的实现代码处,详细描述函数的功能、参数的含义、返回值的含义、使用本函数需要注意的问题、本函数使用其他类或函数的说明等
3.2 Doxygen支持的指令
可以在注释中加一些Doxygen支持的指令,主要作用是控制输出文档的排版格式,使用这些指令时需要在前面加上“\”或者“@”(JavaDoc风格)符号,告诉Doxygen这些是一些特殊的指令,通过加入这些指令以及配备相应的文字,可以生成更加丰富的文档,下面对比较常用的指令做一下简单介绍。
@class <name> [<header-file>] [<header-name> ],eg:@class CTest "inc/class.h"
@exception 可能产生的异常描述,eg:@exception 本函数执行可能会产生超出范围的异常3.3 JavaDoc风格的注释
3.3.1 概述
JavaDoc风格的注释风格主要使用下面这种样式:即在注释块开始使用两个星号‘*‘
/** description * description * description */
3.3.2 简述与详述的方式
Doxygen支持的块(类、函数、结构体等)的注释描述分为两种:简述 和 详述。一般注释的描述由简述开始,经过特殊分隔方式后,后面紧跟详述的内容,javaDoc风格可以使用的分隔方法有以下两种:
- 使用 \brief 参数标识,空行作为简述和详述的间隔标识
/*! @brief Brief description. * description continued. * * Detailed description starts here. */
- 直接使用javaDoc风格,javaDoc风格自动以简述开头,以空行(或者小数点加空格)作为简述与详述的分割
/** Brief description * description continued * * Detailed description starts here. */ /** Brief description * description continued . (注意:这里有一个小数点,加上一个空格) * Detailed description starts here. */
3.3.3 文件头注释示例
3.3.4 类定义注释示例
/** 本类的功能:打印错误信息 * * 本类是一个单件 * 在程序中需要进行错误信息打印的地方 */ class CPrintError { …… }
3.3.5 类成员变量定义示例
- 在成员变量上面加注释的格式
/** 成员变量描述 */ int m_Var;
- 在成员变量后面加注释的格式
int m_color; /**< 颜色变量 */
3.3.6 成员函数的注释示例
/** 下面是一个含有两个参数的函数的注释说明(简述) * * 这里写该函数的详述信息 * @param a 被测试的变量(param描述参数) * @param s 指向描述测试信息的字符串 * @return 测试结果 (return描述返回值) * @see Test() (本函数参考其它的相关的函数,这里作一个链接) * @note (note描述需要注意的问题) */ int testMe(int a,const char *s);
3.3.7 枚举变量的注释示例
/** 颜色的枚举定义 * * 该枚举定义了系统中需要用到的颜色\n * 可以使用该枚举作为系统中颜色的标识 */ enum TEnum { RED, /**< 枚举,标识红色 */ BLUE, /**< 枚举,标志蓝色 */ YELLOW /**< 枚举,标志黄色. */ }enumVar;
3.4 C++风格的注释
3.4.1 概述
C++的注释风格主要使用下面这种样式:即在注释块开始使用三个反斜杠‘/’其他地方其实与JavaDoc的风格类似,只是C++风格不用 “*” 罢了。
3.4.2 简述与详述
C++风格的简述与详述方式与javaDoc类似。
一般注释的描述由简述开始,经过特殊分隔方式后,后面紧跟详述的内容,C++风格可以使用的分隔方法有以下两种:
* 使用 \brief 参数标识,空行作为简述和详述的间隔标识
/// \brief Brief description. /// description continued. /// /// Detailed description starts here. ///
- 使用以空行作为简述与详述的分割
/// Brief description /// description continued. /// /// Detailed description starts here.
- 以小数点加空格作为分隔如下:
/// Brief description /// description continued . (注意:这里有一个小数点,加上一个空格) /// Detailed description starts here. ///
3.4.3 注释风格约定
- 一个代码块(类、函数、结构等)的概述采用单行的”///”加一个空格开头的注释,并写在该代码块声明的前面;
- 一个代码块的详述采用至少两行的”///”加一个空格开头的注释,若不足两行第二行的开头也要写出来,并且放在代码块定义的前面;如果某代码没有声明只有定义或者相反,则在定义或者声明前面写上单行的概述+一个空行+多行的详述;
- 枚举值列表的各项、结构域的各项等采用在本行最后添加”///<”加一个空格开头的注释;
- 对变量的定义采用在变量上面加单行”///”加一个空格开头的注释(相当于是给改变量一个概述);
- 函数的参数用”/// @param”+一个空格开头的行描述在函数的详述里面;
- 函数的返回值用”/// @return”+一个空格开头的行描述在函数的详述里面;
- 函数之间的参考用”/// @see”+一个空格开头的行描述在函数的详述里面;
- 文件头的版权以及文件描述的注释参见例代码。
3.4.4 文件头注释示例
3.4.5 类定义注释示例
/// 本类的功能:打印错误信息 /// /// 本类是一个单件 /// 在程序中需要进行错误信息打印的地方 class CPrintError { …… }
3.4.6 类成员变量定义示例
*在成员变量上面加注释的格式
/// 成员变量描述 int m_Var;
*在成员变量后面加注释的格式
int m_color; /// 颜色变量
3.4.7 成员函数的注释示例
/// 下面是一个含有两个参数的函数的注释说明(简述) /// /// 这里写该函数的详述信息 /// @param a 被测试的变量(param描述参数) /// @param s 指向描述测试信息的字符串 /// @return 测试结果 (return描述返回值) /// @see Test() (本函数参考其它的相关的函数,这里作一个链接) /// @note (note描述需要注意的问题) int testMe(int a,const char *s);
3.4.8 枚举变量的注释示例
/// 颜色的枚举定义 /// /// 该枚举定义了系统中需要用到的颜色\n /// 可以使用该枚举作为系统中颜色的标识 enum TEnum { RED, ///< 枚举,标识红色 BLUE, ///< 枚举,标志蓝色 YELLOW ///< 枚举,标志黄色. }enumVar;
3.5 需要注意的问题
- Doxygen会忽略你在注释中加入的多余的换行,如果你希望保留两行注释之间的空行,那么,在该行加入 \n
4 常见问题
4.1 中文问题:中文注释在文档中是乱码
解决:在expert中的INPUT选项页的INPUT_ENCODEING中填入“GB2312”,这样基于GB的文本编辑器生成的代码就可以正常使用了。
4.2 图形问题:无法绘制类图协作图等图形。
解决:首先确保安装了graphviz for win,注意不是wingraphviz,后者是一个graphviz的com封装,但是doxygen并不是基于它开发的,所以装了也没用。然后在expert的DOT_PATH中填入graphviz的安装路径。接着在wizard的diagram中选择需要生成的图形类别就可以了。
如果出现无法包含.map文件的错误,可以将工作目录设置成html,并将html中所有文件都清除再试。这个问题的原因还不太确定。
4.3 输出chm的问题:如何输出.chm文件
配置时注意expert中的HTML页:选中“GENERATE_HTMLHELP”,然后在CHM_FILE中填上想要的chm文件名。
HHC_LOCATION中输入hhc.exe文件的路径。hhc.exe可以通过安装HTML Help Workshop获得。
或者使用HTML Help Workshop来编译Doxygen生成的html文件夹中的.hhp文件,编译完成后即可在该html文件夹中找到对应的chm文件
4.4 Doxygen无法为DLL中定义的类 导出文档
例如:class __declspec(dllexport) CClassName:public CObject{}目前发现Doxygen无法识别出DLL中定义的类。
- API文档生成工具——Doxygen
- Doxygen—程序文档生成工具
- 部署Doxygen生成API文档
- doxygen --文档自动生成工具
- 源代码文档生成工具----Doxygen
- 开发文档生成工具--Doxygen
- 生成代码文档图—doxygen graphviz
- ns3使用doxygen生成离线api文档
- C++工程 API文档生成-doxygen
- ns3使用doxygen生成离线api文档
- C++文档生成工具——Doxygen相关文章的链接
- 源代码文档自动生成工具 Doxygen
- Doxygen文档生成工具的使用
- Doxygen文档生成工具的使用
- Doxygen文档生成工具的使用
- 文档生成工具doxygen+图像生成工具GraphViz
- 文档生成工具doxygen+图像生成工具GraphViz
- 开发文档生成工具----强大的Doxygen工具使用手册
- ”because search permissions are missing on a component of the path“
- 开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面。
- 用for双重循环打印100-200之间的质数
- Spring集成redis问题(一)
- Windows静态库和动态库的调用方法汇总
- API文档生成工具——Doxygen
- 基于安全的一些思考--竞态条件
- 邮件
- C++ 的MFC 和ATL 及COM 是什么?
- Django学习03---urls.py路由用法与实例
- git 上传命令
- Ice系列——HelloIce
- 等差数列 2,5,8,11,14。。。。 输入:正整数N >0 输出:求等差数列前N项和
- 基于安全的一些思考--随机性与密码学