Doxygen简介
(转自:http://www.cnblogs.com/liuliunumberone/archive/2012/04/10/2441391.html)
一.什么是Doxygen?
Doxygen 是一个程序的文件产生工具,可将程序中的特定批注转换成为说明文件。通常我们在写程序时,或多或少都会写上批注,但是对于其它人而言,要直接探索程序里的批注,与打捞铁达尼号同样的辛苦。大部分有用的批注都是属于针对函式,类别等等的说明。所以,如果能依据程序本身的结构,将批注经过处理重新整理成为一个纯粹的参考手册,对于后面利用您的程序代码的人而言将会减少许多的负担。不过,反过来说,整理文件的工作对于您来说,就是沉重的负担。
Doxygen 就是在您写批注时,稍微按照一些它所制订的规则。接着,他就可以帮您产生出漂亮的文档了。
因此,Doxygen 的使用可分为两大部分。首先是特定格式的批注撰写,第二便是利用Doxygen的工具来产生文档。
目前Doxygen可处理的程序语言包含:
- C/C++
- Java
- IDL (Corba, Microsoft及KDE-DCOP类型)
而可产生出来的文档格式有:
- HTML
- XML
- LaTeX
- RTF
- Unix Man Page
而其中还可衍生出不少其它格式。HTML可以打包成CHM格式,而LaTeX可以透过一些工具产生出PS或是PDF文档。
二.安装Doxygen
- 1.1 安装 Doxygen 1.7.4(Windows) http://sourceforge.net/projects/doxygen/
- 1.2 安装 graphviz 2.28.0(Windows) http://www.graphviz.org/Download
graphviz 是一个由AT&T实验室启动的开源工具包,用于绘制DOT语言脚本描述的图形。Doxygen 使用 graphviz 自动生成类之间和文件之间的调用关系图,如不需要此功能可不安装该工具包。
- 1.3 安装 Windows Help Workshop 1.32
Doxygen 使用这个工具可以生成 CHM 格式的文档。
三.Doxygen的配置
Doxygen 产生文档可以分为三个步骤。一是在程序代码中加上符合Doxygen所定义批注格式。二是使用Doxywizard进行配置。三是使用Doxygen来产生批注文档。
Doxygen 1.7.4 主界面如下图 1 所示。
说明:1,Doxygen 工作目录,就是用来存放配置文件的目录。
2,递归搜索源文件目录需要选上。
选择 wizard 标签下的 Output Topics
相关配置说明如下图 2 所示。
选择 wizard 标签下的 Diagrams Topics
相关配置说明如下图 3 所示。
说明:如果选择这个选项之前需要先安装了 Graphviz 工具包。
选择 expert 标签下的 Project Topics
相关配置说明如下图 4 所示。
说明:编码格式,UTF-8 是首选。如果需要显示中文则选择GB2313.
TAB_SIZE 主要是帮助文件中代码的缩进尺寸,譬如@code和@endcode段中代码的排版,建议设置成4。
OPTIMIZE_OUTPUT_FOR_C 这个选项选择后,生成文档的一些描述性名称会发生变化,主要是符合C习惯。如果
是纯C代码,建议选择。
SUBGROUPING这个选项选择后,输出将会按类型分组。
选择 expert 标签下的 Build
Build页面,这个页面是生成帮助信息中比较关键的配置页面:
EXTRACT_ALL 表示:输出所有的函数,但是private和static函数不属于其管制。
EXTRACT_PRIVATE 表示:输出private函数。
EXTRACT_STATIC 表示:输出static函数。同时还有几个EXTRACT,相应查看文档即可。
HIDE_UNDOC_MEMBERS 表示:那些没有使用doxygen格式描述的文档(函数或类等)就不显示了。当然,如果EXTRACT_ALL被启用,那么这个标志其实是被忽略的。
INTERNAL_DOCS 主要指:是否输出注解中的@internal部分。如果没有被启动,那么注解中所有的@internal部分都
将在目标帮助中不可见。
CASE_SENSE_NAMES 表示:是否关注大小写名称,注意,如果开启了,那么所有的名称都将被小写。对于C/C++这种
字母相关的语言来说,建议永远不要开启。
HIDE_SCOPE_NAMES 表示:域隐藏,建议永远不要开启。
SHOW_INCLUDE_FILES 表示:是否显示包含文件,如果开启,帮助中会专门生成一个页面,里面包含所有包含文件的列
表。
INLINE_INFO :如果开启,那么在帮助文档中,inline函数前面会有一个inline修饰词来标明。
SORT_MEMBER_DOCS :如果开启,那么在帮助文档列表显示的时候,函数名称会排序,否则按照解释的顺序显
示。
GENERATE_TODOLIST :是否生成TODOLIST页面,如果开启,那么包含在@todo注解中的内容将会单独生成并显
示在一个页面中,其他的GENERATE选项同。
SHOW_USED_FILES :是否在函数或类等的帮助中,最下面显示函数或类的来源文件。
SHOW_FILES :是否显示文件列表页面,如果开启,那么帮助中会存在一个一个文件列表索引页面。
选择 expert 标签下的 Input Topics
相关配置说明如下图 5 所示。
说明:输入的源文件的编码,要与源文件的编码格式相同。如果源文件不是UTF-8编码最好转一下。
选择 expert 标签下的 HTML Topics
相关配置说明如下图 6 所示。
说明:1,CHM_FILE文件名需要加上后缀(xx.chm)。
2,如果在 Wizard 的 Output Topics 中选择了 prepare for compressed HTML (.chm)选项,此处就会要求选择 hhc.exe 程序的位置。在 windows help workshop 安装目录下可以找到 hhc.exe。
3,为了解决DoxyGen生成的CHM文件的左边树目录的中文变成了乱码,CHM_INDEX_ENCODING中输入GB2312即可。
4,GENERATE_CHI 表示索引文件是否单独输出,建议关闭。否则每次生成两个文件,比较麻烦。
5,TOC_EXPAND 表示是否在索引中列举成员名称以及分组(譬如函数,枚举)名称。
选择 Run 标签
相关配置说明如下图 7 所示。
点击 Run doxygen 按钮, Doxygen 就会从源代码中抓取符合规范的注释生成你定制的格式的文档。
四.撰写正确格式的批注
并非所有程序代码中的批注都会被Doxygen 所处理。您必需依照正确的
格式撰写。原则上,Doxygen 仅处理与程序结构相关的批注,如
Function,Class ,档案的批注等。对于Function内部的批注则不做
处理。Doxygen可处理下面几种类型的批注。
JavaDoc类型:
/**
* ... 批注 ...
*/
Qt类型:
/*!
* ... 批注 ...
*/
单行型式的批注:
/// ... 批注 ...
或
//! ... 批注 ...
要使用哪种型态完全看自己的喜好。以笔者自己来说,大范围的注
解我会使用JavaDoc 型的。单行的批注则使用"///" 的类型。
此外,由于Doxygen 对于批注是视为在解释后面的程序代码。也就是
说,任何一个批注都是在说明其后的程序代码。如果要批注前面的程
式码则需用下面格式的批注符号。
/*!< ... 批注 ... */
/**< ... 批注 ... */
//!< ... 批注 ...
///< ... 批注 ...
上面这个方式并不适用于任何地方,只能用在class 的member或是
function的参数上。
举例来说,若我们有下面这样的class。
class MyClass {
public:
int member1 ;
int member2:
void member_function();
};
加上批注后,就变成这样:
/**
* 我的自订类别说明 ...
*/
class MyClass {
public:
int member1 ; ///< 第一个member说明 ...
int member2: ///< 第二个member说明 ...
int member_function(int a, int b);
};
/**
* 自订类别的member_funtion说明 ...
*
* @param a 参数a的说明
* @param b 参数b的说明
*
* @return 传回a+b。
*/
int MyClass::member_function( int a, int b )
{
return a+b ;
}
当您使用Doxygen 产生说明文档时,Doxygen 会帮您parsing 您的程
式码。并且依据程序结构建立对应的文件。然后再将您的批注,依据
其位置套入于正确的地方。您可能已经注意到,除了一般文字说明外
,还有一些其它特别的指令,像是@param及@return 等。这正是
Doxygen 另外一个重要的部分,因为一个类别或是函式其实都有固定
几个要说明的部分。为了让Doxygen 能够判断,所有我们就必需使用
这些指令,来告诉Doxygen 后面的批注是在说明什么东西。Doxygen
在处理时,就会帮您把这些部分做特别的处理或是排版。甚至是制作
参考连结。
首先,我们先说明在Doxygen 中对于类别或是函数批注的一个特定格
式。
/**
* class或function的简易说明...
*
* class或function的详细说明...
* ...
*/
上面这个例子要说的是,在Doxygen 处理一个class 或是function注
解时,会先判断第一行为简易说明。这个简易说明将一直到空一行的
出现。或是遇到第一个"." 为止。之后的批注将会被视为详细说明。
两者的差异在于Doxygen 在某些地方只会显示简易说明,而不显示详
细说明。如:class 或function的列表。
另一种比较清楚的方式是指定@brief的指令。这将会明确的告诉
Doxygen,何者是简易说明。例如:
/**
* @brief class或function的简易说明...
*
* class或function的详细说明...
* ...
*/
除了这个class 及function外,Doxygen 也可针对档案做说明,条件
是该批注需置于档案的前面。主要也是利用一些指令,通常这部分注
解都会放在档案的开始地方。如:
/*! \file myfile.h
\brief 档案简易说明
详细说明.
\author 作者信息
*/
如您所见,档案批注约略格式如上,请别被"\" 所搞混。其实,"\"
与"@" 都是一样的,都是告诉Doxygen 后面是一个指令。两种在
Doxygen 都可使用。笔者自己比较偏好使用"@"。
接着我们来针对一些常用的指令做说明:
@file |
档案的批注说明。 |
@author |
作者的信息 |
@brief |
用于class 或function的批注中,后面为class 或function的简易说明。 |
@param |
格式为 @param arg_name 参数说明 主要用于函式说明中,后面接参数的名字,然后再接关于该参数的说明。 |
@return |
后面接函数传回值的说明。用于function的批注中。说明该函数的传回值。 |
@retval |
格式为 @retval value 传回值说明 主要用于函式说明中,说明特定传回值的意义。所以后面要先接一个传回值。然后在放该传回值的说明。 |
Doxygen 所支持的指令很多,有些甚至是关于输出排版的控制。您可从Doxygen的使用说明中找到详尽的说明。
下面我们准备一组example.h 及example.cpp 来说明Doxygen 批注的使用方式:
example.h:
/**
* @file 本范例的include档案。
*
* 这个档案只定义example这个class。
*
* @author garylee@localhost
*/
#define EXAMPLE_OK 0 ///< 定义EXAMPLE_OK的宏为0。
/**
* @brief Example class的简易说明
*
* 本范例说明Example class。
* 这是一个极为简单的范例。
*
*/
class Example {
private:
int var1 ; ///< 这是一个private的变数
public:
int var2 ; ///< 这是一个public的变数成员。
int var3 ; ///< 这是另一个public的变数成员。
void ExFunc1(void);
int ExFunc2(int a, char b);
char *ExFunc3(char *c) ;
};
example.cpp:
/**
* @file 本范例的程序代码档案。
*
* 这个档案用来定义example这个class的
* member function。
*
* @author garylee@localhost
*/
/**
* @brief ExFunc1的简易说明
*
* ExFunc1没有任何参数及传回值。
*/
void Example::ExFunc1(void)
{
// empty funcion.
}
/**
* @brief ExFunc2的简易说明
*
* ExFunc3()传回两个参数相加的值。
*
* @param a 用来相加的参数。
* @param b 用来相加的参数。
* @return 传回两个参数相加的结果。
*/
int ExFunc2(int a, char b)
{
return (a+b);
}
/**
* @brief ExFunc3的简易说明
*
* ExFunc3()只传回参数输入的指标。
*
* @param c 传进的字符指针。
* @retval NULL 空字符串。
* @retval !NULL 非空字符串。
*/
char * ExFunc2(char * c)
{
return c;
}
Doxygen简介的更多相关文章
- 安装doxygen(一个自动文档生成工具)+Graphviz图形可视化软件
参考文章: http://www.fmddlmyy.cn/text21.html http://www.cnblogs.com/duguguiyu/archive/2008/06/29/1231852 ...
- 使用 Doxygen 生成文档 (以FFmpeg 4.1.1 为例)
背景 在查找 ffmpeg 文档的时候,发现其文档是根据 Doxygen 生成的. 为了学习方便,这里以 生成 ffmpeg 4.1 文档 为例. 注:为了兼顾 arm 与 host ,本人选择了同时 ...
- VScode Doxygen与Todo Tree插件的使用与安装
VScode Doxygen与Todo Tree插件的使用与安装 引言 程序中代码注释的规范和统一性是作为工程人员必不可少的技能,本文在Visual Studio Code的环境下简单介绍Doxyge ...
- 代码注释规范之Doxygen
1.Doxygen简介 Doxygen是一个程序的文档产生工具,可以将程序中的注释转换成说明文档或者说是API参考手册,从而减少程序员整理文档的时间.当然这里程序中的注释需要遵循一定的规则书写,才能让 ...
- 使用Xcode HeaderDoc和Doxygen文档化你的Objective-C和Swift代码
在一个应用的整个开发过程中涉及到了无数的步骤.其中一些是应用的说明,图片的创作,应用的实现,和实现过后的测试阶段.写代码可能组成了这个过程的绝大部分,因为正是它给了应用生命,但是这样还不够,与它同等重 ...
- Doxygen给C程序生成注释文档
近段时间,一直在学习华为C语言编程规范(2011版),在“注释”这一章中发现了一种“Doxygen”的注释转文档工具,查看诸多相关资料,并进行编程实践,终于可以利用Doxygen给C程序生成注释文档. ...
- [C] c99int(让VC等编译器自动兼容C99的整数类型)V1.02。源码托管到github、添加CMake编译配置文件、使用doxygen规范注释
新版本—— http://www.cnblogs.com/zyl910/p/zlstdint_v100.html[C] zlstdint(让VC.TC等编译器自动兼容C99的整数类型)V1.0.支持T ...
- 2013年12月26日 星期四 doxygen入门--很好
body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...
- 用Doxygen生成文档
我是生成C/C++的文档,输出html格式的文档.就不做成CHM了. 注释要这种写:(当然,有数种注释风格,选择任意你喜欢的就行) /** * * 一系列的doxygen的 command * * * ...
随机推荐
- python常用方法详解
1,讲序列分解为单独的变量 p=(4,5) x,y=p print(x,y) 如果在分解中想丢弃某些特定的值,可以采用_来进行 data=['A','B','c','d'] _,name,age,_= ...
- Linux环境安装nodejs
安装node 去官网下载nodejs 根据下载的文件可以看出它的压缩方式是.xz的方式,所以不能直接使用linux命令tar直接下载. xz -d node-v10.6.0-linux-x64.tar ...
- StrobeMediaPlayback的Javascript桥接
StrobeMediaPlayback是Adobe官方出的流媒体播放器,支持RTMP协议,在项目中运用到了,却在网上怎么都找不到相关资料,可以说是寥寥无几. 无奈之下,稍微看了点源代码,对播放器与JS ...
- mysql多实例的配置
1.创建多实例的目录: mkdir -p /data/mysql/mysql_3307/{data,tmp,logs} mkdir -p /data/mysql/mysql_3308/{data,tm ...
- vue-router路由器的使用
一. vue-router路由 1.简介 1.为什么要用vue-router 使用Vue.js开发SPA(Single Page Application)单页面应用 2.什么是单页面应用 根据不同ur ...
- Vue.js——框架
一.什么是VUE vue 是一个构建用户界面的javascript框架 特点:轻量,高效 特性:双向数据绑定,数据驱动视图 二.vue的使用 1.引入vue.js <script src=vue ...
- Keras实践:实现非线性回归
Keras实践:实现非线性回归 代码 import os os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE" import ke ...
- Codeforces Round #385 (Div. 1) C. Hongcow Buys a Deck of Cards
地址:http://codeforces.com/problemset/problem/744/C 题目: C. Hongcow Buys a Deck of Cards time limit per ...
- 利用同步网盘搭建个人或团队SVN服务器
这篇文章是以前写的,现在强烈推荐两个站.1.http://git.oschina.com 2.http://www.coding.net. 推荐理由:1.可创建私有项目.2.免费稳定.3.VS2013 ...
- Servlet+MyBatis项目转Spring Cloud微服务,多数据源配置修改建议
一.项目需求 在开发过程中,由于技术的不断迭代,为了提高开发效率,需要对原有项目的架构做出相应的调整. 二.存在的问题 为了不影响项目进度,架构调整初期只是把项目做了简单的maven管理,引入spri ...