前言

下面主要讲解linux下Doxygen命令行实现html文档生成的操作,当然也有界面版本操作方式,linux下安装doxygen-gui即可通过doxywizard开启界面操作,windows下也可以通过doxywizard.exe界面进行配置操作,具体的界面操作请参考其他网上文章,不过有一句话需要说明:会命令行操作的,应该都会界面操作,而会界面操作的就不一定会命令行操作了。

windows下的操作方式可以参考 使用doxygen生成chm范例

doxygen是什么

按照约定的格式注释源代码,用工具处理注释过的源代码产生文档。通过这种方式产生文档至少有以下好处:

便于代码和文档保持同步

可以对文档做版本管理

Doxygen就是这样的工具,Doxygen是一个程序的文件产生工具,可将程序中的特定批注转换成为说明文件。很多编程语言都有类似的文档工具,例如:Java有javadoc,Ruby有rdoc。对于C/C++程序,我们可以用Doxygen生成文档。Doxygen有如下特点:

支持的编程语言:完全支持 C、C++、Java、IDL、Objective-C、Python、PHP、C#、Fortran、VHDL

输出格式:直接支持 HTML、Latex、RTF、manpage、Qt help project、XML,间接支持 chm、

Qt Compressed Help、Postcript和PDF;

兼容 JavaDoc、Qt-Doc、KDOC等类似工具;

支持平台:Unix(包括Linux)、MacOs、Windows等;

主页:http://www.doxygen.org/

邮件列表:

doxygen-user@lists.sourceforge.net

doxygen-develop@lists.sourceforge.net

作者:Dimitri van Heesch (dimitri@stack.nl) ;

Doxygen基本操作流程

按照Doxygen的约定,将代码“文档化”。这部分请参考 代码‘文档化’;

编写一个配置文件(Doxyfile),用于配合Doxygen生成最终的文档。这部分请参考 编写一个Doxygen配置文件;

执行doxygen Doxyfile生成文档。

下面详细介绍每一个步骤。

代码‘文档化’

这一部分需要了解基本的注释规则和doxygen注释标记

doxygen注释规则

并非所有程序代码中的注释都会被 Doxygen 处理(除非在配置文件里使能了EXTRACT_ALL等选项),必需依照正确的格式撰写,Doxygen 可处理下面两种类型的注解(注意:默认采用的JavaDoc风格,你也可以选择采用Qt或者c/c++风格),如下:

/**

* ...多行注释...

*

*/

/** ...单行注释... */

由于 Doxygen 认为注释是说明它下面的程序代码。所以,如果注释要与前面的程序码在同一行内,则需用下面这种型式的注释:

/**< ...代码同行情况的注释 */

注意,除**后多了一个

首先,我们先说明在 Doxygen 中对於类别或是函数注解的一个特定格式。

/**

*

* struct、class、functiond的简易说明...

*

* struct、class、functiond的详细说明...

* ...

*/

上面这个例子要说的是,在 Doxygen 处理一个类定义或是函数定义之上的注释时:

会先判断第一行为简易说明,这个简易说明将一直到遇见一个空白行的出现或是遇到第一个 . 为止;

之后的注解将会被视为详细说明。

另一种比较清楚的方式是指定@brief 的指令,这将会明确的告诉 Doxygen 哪个是简易说明。

doxygen在处理注释文档的时候,会进行如下的过程:

执行在文档中的特殊命令。命令都以''或'@'开始,二者是一样的,都是为了引出一个命令。例如'\brief','\details','@brief', '@details'等等。

如果一行以空白开始,后面跟着一个或者多个'',然后又跟着0个或者多个空白,那么所有的空白和''将会被移除。

所有的空行将会被当作段分隔符号。

为相应的被文档化了的类的单词创建相应的链接(除非这个单词前面放置一个'%',这时候就没有链接了并且'%'也会被移走了)。

如果在文本中发现了相应的匹配,会建立成员的链接。(?)

文档中的HTML标记会被解释、转化为LATEX的东西以便成为LATEX的输出。(?)

Doxygen常用的代码注释标记

文件信息

@file 文件名(遵守文件命名规则) --> 文件声明,即当前文件名

@author 作者名 --> 作者

@version 版本号 --> 版本号

@todo 说明文字 --> TODO 列表,在相关页面有它专门一项

注:只能在实现文件(.c/.cpp)中使用,如果相同函数的实现文件与头文件中均有,生成的文档中会有重复项,可以理解为调用者不应知道实现流程

@date 日期时间 --> 说明文件生成的日期时间

@section 章节标题 --> @section LICENSE 版权许可 @section DESCRIPTION 描述

模块信息

@defgroup 模块名(英文) 显示名(中文) @{ 类/函数/变量/宏/... @}--> 定义模块

@ingroup 模块名(英文) [显示名(中文)]--> 作为指定名的模块的子模块,显示名为可选项,可与指定名的模块的显示名不同

@addtogroup 模块名(英文) [显示名(中文)] --> 作为指定名的模块的成员,显示名为可选项,必需与指定名的模块的显示名相同

@name 显示名(中文) @{ 变量/宏 @} --> 按用途分,以便理解全局变量/宏的用途

这部分推荐参考: doxygen使用总结

函数信息

@param 参数名 说明文字 --> 不建议使用这个

@param[in] 参数名 说明文字 --> 输入参数

@param[out] 参数名 说明文字 --> 输出参数

@param[in,out] 参数名 说明文字 --> 即输入又输出参数

@exception 用来说明异常类及抛出条件

@remark 表示评论,暴露给客户程序员的文档

@return 说明文字 --> 返回值说明

@retval 说明文字 --> 特定返回值说明

@note 说明文字 --> 注解,可以描述工作流程和注意事项

@par [段落标题] --> 开创新段落,一般与示例代码联用

@code --> 示例代码开始

@endcode --> 示例代码结束

@see 类/函数/变量/文件/URL --> 参见,

类名::函数名 或 ::函数名 可以变成超链接点击跳转到对应函数说明处

函数重载的情况下,要带上参数列表以及返回值

@deprecated 说明文字 --> 过时列表,在相关页面有它专门一项

注:只能在头文件(*.h)中使用,如果相同函数的实现文件与头文件中均有,

生成的文档中会有重复项,可以理解为维护者不关心这个接口是不是要过时

@pre 说明文字 --> 前置条件

@arg 参数/返回值 说明文字 --> 以列表形式说明参数取值意义

注:也可以用 - 或 -# 来代替,建议此种方法,简单明了

- 第一级

- 第二级

- 第三级

即相同开头的-或 -#第二行比第一行缩进一个英文空格就变了第二级,依次类推

- 开头的第一级为实心黑圆点;第二级为空心黑圆点;第三级以后为实心方块;

-#开头的第一级为数字(1./2./3./...),

第二级为小写字母(a./b./c./...),

第三级为罗马数字(i./ii./iii./...),

第四级为大写字母(A./B./C./...)

提醒信息

@brief 说明文字 --> 摘要,即当前文件/函数说明

@attention 说明文字 --> 注意

@bug 说明文字 --> 问题

@warning 说明文字 --> 警告

@ref 引用其他标记,类似于html中的锚

@since {text} 通常用来说明从什么版本、时间写此部分代码

@relates 通常用做把非成员函数的注释文档包含在类的说明文档中

@def 宏定义说明

@fn 函数 函数说明

@test 测试示例、信息

(@bug、@test以及@todo等会出现链接页面)

下面为生成特殊字体的命令:

@a @e @em:其后的单个字(word)表现为斜体,以强调作用。如有多个word的话,使用xxx xxx代替

@b:其后的word为粗体,多个则使用xxx xxx

@c @p:字体表现为打印机字体,多个则使用xxx xxx

@enum 引用了某个枚举,Doxygen会在该枚举处产生一个链接 eg:@enum CTest::MyEnum

@var 引用了某个变量,Doxygen会在该枚举处产生一个链接 eg:@var CTest::m_FileKey

@class 引用某个类,格式:@class [] [] eg:@class CTest "inc/class.h"

下面举例说明可能遇到的几种情况:

文件注释

/**

* @file

* @author rongp

* @version 1.0.0

* @date 2016/02/22

*

* @section LICENSE

*

* Copyright(c) 2015-2020 XXX

* All rights reserved

*

* @brief iss服务器端sdk导出根文件

*

* @section DESCRIPTION

* 界面开发者只需要包含该头文件即可, 具体的导出数据结构、api分别分别在

* net_io_export.h和app_amp_export.h中

*

*/

函数注释

/**

* @brief 创建与本地服务通讯的端点

* @param[in] proto_type 端点通讯采用的协议类型, 一般设置为PROTO_TYPE_TRANS即可

*

* @return 用于通讯的端点指针,作为后面接口的参数

* @retval non-NULL 成功

* @retval NULL 出错

*

* @warning 该接口只能在服务端sdk使用, 当前只支持PROTO_TYPE_TRANS协议类型

*

* 示例

@code

gpointer e = net_io_create_local_endpoint(PROTO_TYPE_TRANS);

@endcode

*

* @since 1.0.0

*/

结构体注释

/**

* @brief 服务器信息描述结构

*/

struct _ServerInfo {

/** 服务器系统版本, 包括硬件信息、操作系统信息等 */

gchar sys_ver[128];

/** 服务器软件版本 */

gchar soft_ver[128];

};

枚举注释

/**

* @brief 消息返回码

*/

enum MSG_RET_CODE {

/** 执行成功 */

MSG_EXECUTE_OK = 0,

/** 超时 */

MSG_TIMEOUT = -1,

/** 消息的大小有误 */

MSG_SIZE_UNMATCH = -2,

/** 不允许执行该消息 */

MSG_OPT_FORBID = -3,

/** 服务器端服务出错 */

MSG_SYSTEM_ERR = -4,

/** 消息的参数有误 */

MSG_ARG_INVALID = -5,

/** buf内存不够 */

MSG_NOMEM = -100,

};

编写一个Doxygen配置文件

一般是通过先生成模板配置文件,然后基于模板配置文件修改即可。使用 "doxygen -g" 命令在当前目录下生成名为‘Doxyfile’的配置文件模板。也可以采用 "doxygen -g filename" 命令格式指定所生成的配置文件名为filename。如无特殊需要,采用默认的配置文件名即可。如果对 Doxygen 各配置选项的意义有一定了解,可以在生成配置文件的命令中添加 "-s" 选项,生成不含注释的配置文件,如:doxygen -s -g 这种方式生成的配置文件非常精简,没有任何注释。

有了doxygen模板配置文件后,现在要做的就是对它进行修改了,下面以c语言开发的项目生成html为例。主要有下面几个选项需要修改:

# 项目名称,将作为于所生成的程序文档首页标题,需要使用双引号括住

PROJECT_NAME = “xxx”

# 文档版本号,可对应于项目版本号,譬如 git、svn、cvs 所生成的项目版本号

PROJECT_NUMBER = “1.0.0”

# 程序文档输出目录,产生的文件会放在这个路径之下。如果没有填这个路径,将会以当前所在路径来作为输出路径。

OUTPUT_DIRECTORY = doc/

# 程序文档语言环境,预设为 English。1.2.16 版后,可以用 Chinese 输出简体中文,也可以使用

# Chinese-Traditional 来输出中文繁体的格式。

OUTPUT_LANGUAGE = Chinese

# 如果是制作 C 程序文档,该选项必须设为YES,否则默认生成 C++ 文档格式

OPTIMIZE_OUTPUT_FOR_C = YES

# 对于使用 typedef 定义的结构体、枚举、联合等数据类型,只按照 typedef 定义的类型名进行文档化

TYPEDEF_HIDES_STRUCT = YES

# 把这个标记设置为Yes,即使各个类或函数没有文档,也要提取信息

EXTRACT_ALL = YES

# 把这个标记设置为Yes,文档就会包含类的私有数据成员

EXTRACT_PRIVATE = YES

# 把这个标记设置为Yes,文档就会包含文件的静态成员(函数和变量)

EXTRACT_STATIC = YES

# 在 C++ 程序文档中,该值可以设置为 NO,而在 C 程序文档中,由于 C 语言没有所谓的域/名字空间

# 这样的概念,所以此处设置为 YES

HIDE_SCOPE_NAMES = YES

# 让 doxygen 静悄悄地为你生成文档,只有出现警告或错误时,才在终端输出提示信息

QUIET = YES

# 这个标记创建一个以空格分隔的所有目录的列表,

# 这个列表包含需要生成文档的 C/C++ 源代码文件和头文件,可以不设定,即为当前目录!

INPUT = inc/

# 输入文件的编码格式,需要自己根据INPUT指定的文件选择,否则会乱码

INPUT_ENCODING = UTF-8

# 在默认情况下,doxygen 会搜索具有典型 C/C++ 扩展名的文件,

# 比如 .c、.cc、.cpp、.h 和 .hpp 。

# 可以使用如下形式的列表方式,指定INPUT下要处理的文件

# 注:文件类型后有空格然后是右斜杠然后回车,每一个文件类均独自一行!

# FILE_PATTERNS = *.h \

*.c \

*.cpp

FILE_PATTERNS =

# 递归遍历由 INPUT 所指定的目录及其所有子目录,寻找由 FILE_PATTERNS 指定的要被文档化的文件

RECURSIVE = YES

# 如果您有特定文件或目录,不希望经过 Doxygen 处理,那你可在这指出,没有就不指出

# 例如:EXCLUDE = /home/xxx/src_root /home/xxx/test

EXCLUDE =

# 类似于 FILE_PATTERNS 的用法,只是这个是供 EXCLUDE 所使用

EXCLUDE_PATTERNS =

# 若设定为 YES,就会产生 HTML 版本的说明文件。HTML 文件是 Doxygen 预设产生的格式之一

GENERATE_HTML = YES

# 若设定为 YES,Doxygen 会帮您产生一个树状结构,在页面左侧,默认为 NO

# 这个树状结构是以 JavaScript 所写成。所以需要新版的 Browser 才能正确显示。

GENERATE_TREEVIEW = YES

其他可参考的:

文档输出格式

除了 HTML 之外,doxygen 还可以生成几种输出格式的文档。可以让 doxygen 生成以下格式的文档:

UNIX 手册页:把 标记设置为 Yes。在默认情况下,会在 指定的目录中创建 man 子文件夹,生成的文档放在这个文件夹中。必须把这个文件夹添加到 MANPATH 环境变量中。

Rich Text Format(RTF):把 标记设置为 Yes。把 标记设置为希望放置 .rtf 文件的目录;在默认情况下,文档放在 OUTPUT_DIRECTORY 中的 rtf 子文件夹中。要想支持跨文档浏览,应该把 标记设置为 Yes。如果设置这个标记,生成的 .rtf 文件会包含跨文档链接。

Latex:在默认情况下,doxygen 生成 Latex 和 HTML 格式的文档。在默认的 Doxyfile 中, 标记设置为 Yes。另外, 标记设置为 Latex,这意味着会在 OUTPUT_DIRECTORY 中创建 latex 子文件夹并在其中生成 Latex 文件。

Microsoft® Compiled HTML Help(CHM)格式:把 标记设置为 Yes。因为在 UNIX 平台上不支持这种格式,doxygen 只在保存 HTML 文件的文件夹中生成一个 index.hhp 文件。您必须通过 HTML 帮助编译器把这个文件转换为 .chm 文件。

Extensible Markup Language(XML)格式:把 标记设置为 Yes。(注意,doxygen 开发团队还在开发 XML 输出)。

按照上面的修改后,就可以执行第三步,执行命令doxygen Doxyfile生成文档了。注意:这里的Doxyfile

为你实际的Doxygen配置文件名。

Doxygen与其他工具配合生成chm

Doxygen FAQ

6.1 中文问题:中文注释在文档中是乱码

解决:在expert中的INPUT选项页的INPUT_ENCODEING中填入“GB2312”,这样基于GB的文本编辑器生成的代码就可以正常使用了。

6.2 图形问题:无法绘制类图协作图等图形。

解决:首先确保安装了graphviz for win,注意不是wingraphviz,后者是一个graphviz的com封装,但是doxygen并不是基于它开发的,所以装了也没用。然后在expert的DOT_PATH中填入graphviz的安装路径。接着在wizard的diagram中选择需要生成的图形类别就可以了。

如果出现无法包含.map文件的错误,可以将工作目录设置成html,并将html中所有文件都清除再试。这个问题的原因还不太确定。

6.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文件

6.4 Doxygen无法为DLL中定义的类 导出文档

例如:

class __declspec(dllexport) CClassName:public CObject

{

}

目前发现Doxygen无法识别出DLL中定义的类。

http://ticktick.blog.51cto.com/823160/188674

未完,待续

2016年6月

doxygen 命令_doxygen使用相关推荐

  1. doxygen 命令_Doxygen

    Doxygen Linux 1. 安装 安装Doxygen$ sudo apt-get install doxygen 安装Graphviz$ sudo apt-get install graphvi ...

  2. doxygen 命令_doxygen使用总结

    doxygen [功能] 为许多种语言编写的程序生成文档的工具. [举例] *生成一个模板配置文件,模板文件中有详细的注释: $doxgen -g test 这样,会生成一个test文件,1500多行 ...

  3. doxygen 命令_doxygen使用详解

    为代码写注释一直是大多数程序员有些困扰的事情.当前程序员都能接受为了程序的可维护性.可读性编码的同时写注释的说法,但对哪些地方应该写注释, 注释如何写,写多少等这些问题,很多程序员仍然没有答案.更头痛 ...

  4. doxygen 命令_使用 Doxygen 制作 C 程序文档

    目前,网上所能搜到 Doxygen 资料,大都是介绍 C++ 程序文档生成的,对于 C 程序的文档生成鲜有记述.由于我们的项目主要是采用 C 语言实现,这两天在学习使用 Doxygen 制作 C 程序 ...

  5. doxygen 命令_学习用 doxygen 生成源码文档

    学习用 doxygen 生成源码文档 Arpan Sen 2008 年 10 月 13 日发布 维护用 C/C++ 开发的遗留系统并添加新特性是一项艰难的任务.这涉及几方面的问题:理解现有的类层次结构 ...

  6. linux c/c++ 代码使用 doxygen 自动生成文档

    www.doxygen.org 的使用非常方便,下面分成2步介绍一下 1. 注释风格,需要在c/c++代码中按照下面的风格添加注释,基本上还是很顺手的 C++的注释风格 主要使用下面这种样式:即在注释 ...

  7. 代码文档生成工具Doxygen教程及实例

    程序员的很多文档,特别是有代码的文档,绝大部分都是由一款文档生成工具[Doxygen]生成. 什么是Doxygen? Doxygen 是一个程序的文件产生工具,可将程序中的特定批注转换成为说明文件.通 ...

  8. 一款常用文档生成工具:Doxygen

    关注+星标公众号,不错过精彩内容 来源 | 简书 编排 | strongerHuang 程序员的很多文档,特别是有代码的文档,绝大部分都是由一款文档生成工具[Doxygen]生成. 什么是Doxyge ...

  9. linux程序注释生成器,Doxygen—程序文档生成工具

    doxygen是一种从源代码生成文档的工具,支持多种语言.当然,源代码中需按一定的格式写注释,这些注释的格式也能帮助我们养成很好的注释习惯,可以尝试一下. 使用doxygen生成文档的方法很简单: $ ...

最新文章

  1. 元宇宙中可跨语种交流!Meta 发布新语音模型,支持128种语言无障碍对话
  2. 理解Docker(5):Docker 网络
  3. python变量类型-python 变量类型 number
  4. docker redis重启_Docker解决傻瓜式安装软件
  5. LC滤波器简单设计法 - 一文读懂LC滤波器简单设计方法及原理介绍,LC值计算方法...
  6. hbase集群之间数据迁移_hbase数据迁移到另一集群上
  7. 树形结构 —— 并查集 —— 带权并查集
  8. STM8学习笔记---通过示波器分析串口数据
  9. C++_函数_函数的占位参数_函数重载---C++语言工作笔记034
  10. 中国天然驱蚊剂行业市场供需与战略研究报告
  11. 三角矩阵的逆矩阵怎么求_电子科技大学矩阵理论复习笔记 第六章 广义逆矩阵...
  12. 机构、基民双输,基金销售的利益困局如何破?
  13. Java二:计算机语言发展进程 以及 JAVA的发展、特性、版本介绍
  14. TeeChart Pro FOR delphi 年底稳定版
  15. 加码游戏直播 快手已成腾讯防御今日头条的重要棋子?
  16. cmd关闭kill进程
  17. matlab模板图像匹配,基于Matlab 图像匹配――模板匹配
  18. oracle左连接应用场景,Oracle左连接left join 的实际操作与应用
  19. python3.6从入门到精通mobi_Python 3.6零基础入门与实战epub
  20. jQuery UI Autocomplete是jQuery UI的自动完成组件

热门文章

  1. Nanachi发布:基于 React 的多端小程序转译框架
  2. linux中怎么测试i o,[linux]linuxI/O测试的方法之dd
  3. 无监督学习 | KMeans与KMeans++原理
  4. 这个处理不同基因组区域关系的工具集很不错!
  5. 使用R语言的正确姿势,R包干货奉献
  6. 解决mac 系统软件被阻止载入点允许没反应的问题
  7. python语言程序设计编程题_Python语言程序设计(测试练习题)
  8. 洛谷 刷题 深基部分题解(python版)-2022.01.29
  9. NOIP1996复赛 普及组 第二题 python
  10. 1168:大整数加法--2022.01.22 AC