doxygen+VIM文档实用指南for C/C-liked Programmers

原创 2006年12月31日 23:08:00

摘要:

文档撰写是一项十分繁琐而且费力的工作,相信已经有很多人对此深感头痛。文档生成工具的出现最大限度地帮助程序员解决了这个问题,这些工具通常可以从程序源代码自动生成文档,大大方便了文档工作。这篇小东西主要介绍了如何用VIMdoxygen来快速生成注释,并用最少的额外劳动来完成专业水准的程序文档的过程。仅供参考,如有雷同,纯属巧合。 

关键字:

       doxygen vim doxygentoolkit chm dot lex CLanuageScanner 

补充:

本文一开始是为dylan同学准备的,后来有所扩展。本文不涉及doxygen注释的具体做法,因为可以在网上得到更多关于这方面的范例和资料。

 什么是doxygen

什么是VIM

为什么要使用doxygen+VIM

需要做什么?

1)    准备工作

2)    添加注释

3)    配置并运行doxygen

4)    编译成chm

5)    一些配置选项

Dot图形扩展

doxygen方便扩展吗?

小结

 

什么是doxygen

doxygen是一个十分好用的自由软件,是一种文档生成器,其工作机制是利用注释中的有效信息来自动生成文档。目前doxygen的最新版是(1.5.1),从http://www.doxygen.org上可以下载最新版的doxygen1.5.1版的doxygen可处理的语言包括:

l         C/C++

l         Java

l         Python

l         PHP

l         Objective-C

l         IDL (Corba, MicrosoftKDE-DCOP类型)

l         C#

l         D

它支持以下文档格式:

l         HTML

l         XML

l         LaTeX

l         RTF

l         Unix Man Page

         有了doxygen的支持后,从软件代码到项目文档的转化十分简单,直接执行doxygen可执行程序就可以了。此时doxygen会在当前目录下寻找默认的配置文Doxyfile(此文件可以手工编写,也可以借助于doxywizard生成),并从配置文件中读入待解析的文件列表和一些设置,最后生成相应格式的文档。而你所需要做的唯一工作,就是在软件代码中添加doxygen能够识别的注释。也就是说,只要在编辑代码的时候遵从doxygen的规范来添加注释,就毫不费劲地生成程序文档了。

和其他的一些注释工具相比,doxygen的优势在于它支持众多的文件类型,并能够生成十分漂亮的网页。一个典型的doxygen文档包含文件列表,函数列表,全局变量列表,结构体列表,为读者提供全局的信息。doxygen的自带的tag工具还可以帮助生成交叉索引,方便从一个函数跳转到另一个函数。这对于了解整个项目的结构和接口以及调用关系是十分有益的。

多说无益,下面给一个简单的范例,看看doxygen是如何工作的。(此部分代码也是用doxygen生成的)

00001 /** 
00002  * @file show.c
00003  * @brief written to show the doxygen documentation tool.
00004  * @author Clark ZHUO, zkk@mails.tsinghua.edu.cn
00005  * @date 2006-11-09
00006  */
00007 #include <stdio.h>
00008 
00009 extern void printf(const char *format, ...);
00010 extern void fprintf(FILE f, const char *format, ...);
00011 
00012 /**
00013  * @mainpage
00014  * The page is showed to you!
00015  *
00016  * @defgroup macro
00017  * @addtogroup macro
00018  * simple macro
00019  * @{ */
00020 /** it is a macro
00021  * the doxygen merge the message*/
00022 #define MACRO1 1
00023 /** @} */ 
00024 
00025 /** @defgroup codes
00026  * @addtogroup codes
00027  * codes of this function
00028  * @{*/
00029 
00030 const char[] msg="Hello, doxygen!";     
00031 /** 
00032  * @brief @b invoke just invoke some example
00033  * 
00034  * @param a first parameter
00035  * @param b second paremeter
00036  * @param operation selectable paremeter
00037  * 
00038  * @return
00039  *      - MACRO1 if default operation is called
00040  *      - 0 if a or b is 0
00041  *      - -1 else
00042  */
00043 int invoke(int a, int b, int operation=0)
00044 {
00045         printf(msg);
00046         if (operation != 0) {
00047                 fprintf(2, "just a test.");
00048                 return MACRO1;
00049         }
00050         if ( (a==0) || (b==0)) return 0;
00051         return -1;
00052 }
00053 
00054 /** 
00055  * @brief main the function for the program
00056  * 
00057  * @param argc argument count for std C main
00058  * @param argv argument value for std C main
00059  * 
00060  * @return always return 0 to shell
00061  */
00062 int main(int argc, char *argv[])
00063 {
00064         int val=1;
00065         int valb=2;
00066 
00067         printf("Program starts.../n");
00068         /** <b> In function: </b> the main function called invoke*/
00069         invoke(val, valb);
00070         return 0;
00071 }
00072 
00073 /** @}*/

说明:以上例子主要演示了file, function, param, return等常用的doxygen标签,在doxygen帮助的Special Commands”部分列出了所有的标签。

        可以注意到,代码中所有的注释都以/**开头,这正是doxygen的一个标记,说明这段注释文本将被doxygen进行解释。事实上,doxygen同时支持好几种类型的注释风格,包括JavaDoc风格的/** */QT风格的/*! */,和行注释风格的/////!

        还可以注意到注释中有很多以@为前缀的语句,这些紧跟在@符号后面的标识符就是doxygen的关键字(也可以用’//’来替代’@’)。doxygen通过这些关键字来组织所生成的文档。例如,@file告诉doxygen后面的字符串是文件的名字,而@date则说明了文件的生成时间。

        以下就是所生成的文档中函数列表中关于invoke的部分,效果还不错吧^_^(左侧是index页的模块列表,右侧是函数invoke的文档)

 

什么是VIM

         这个问题就直接跳过了。作为最有名的编辑器之一,网上有铺天盖地的文章来介绍VIM的各种技巧。www.vim.org上面也有足够的信息和资源。你只用IDE?那你往下看看用VIM能不能给你带来更高的效率,如果值得,不妨只用IDE来编译和调试。

为什么要使用doxygen+VIM

         从前文已知,doxygen确实是一种很不错的工具。但是为了帮助doxygen来生成文档,你需要在注释上花费更多的时间和精力。通常,这意味着你在写注释的时候需要更集中的注意力,和敲击更多的键盘。如果既想享受doxygen带来的便利,又不愿意在每次写注释的时候多写一大堆相似的,重复性的东西。这时候该怎么办呢?可以使用编辑器插件来最小化自己键入的字符。

         作为世界上最著名的两大编辑器之一,VIM拥有众多的fans。和emacs不同,VIM的迷人之处在于其简约之美和强大的可扩展性。在随后的部分中我将向大家介绍doxygenToolkit.vim这个插件的基本用法。在安装这个插件之后,你只需要执行一个简单的操作,就可以完成doxygen风格的注释。它将使你的编码工作事半功倍。

         doxygentoolkit.vim插件可以在www.vim.org上获取。

需要做什么

以下将简要介绍VIM+doxygen的使用方法:

1)        准备工作

安装doxygen,安装gvim,下载doxygentoolkit.vim并将其安装到$VIMRUNTIME/plugin目录下。

之后,需要在VIM的配置文件中(windows下的_vimrclinux下的vimrc或者~/.vimrc)doxygentoolkit这个插件配置一些全局变量:

let g:doxygenToolkit_authorName="your name"

let g:doxygenToolkit_briefTag_funcName="yes"

其余的配置可以自己查阅doxygentoolkit的说明。这样,你就可以通过DoxAuthorDoxDoxb等几个命令来完成doxygen风格的文档了。当然,你可以用VIMmap功能来绑定这几个命令。我通常采用以下绑定:

map <F3>a :DoxAuthor

map <F3>f :Dox

map <F3>b :DoxBlock

map <F3>c O/** */<Left><Left>

2)        添加注释

        在添加注释时,最常用的是:Dox,而每个文件同时也需要:DoxAuthor来添加文件头。

使用:Dox命令来为一个函数添加注释十分简单。你只需要把光标移动到函数声明或者定义所在行(函数原型所在行),然后执行:Dox就可以了。Dox会自动解析你的函数原型,并将相应的参数和返回值列出来。例如,当你对

int invoke(int a, int b, int operation=0)

添加注释时,Dox将生成如下代码

/**

 * @brief invoke

 *

 * @param a

 * @param b

 * @param operation

 *

 * @return

 */

并将光标设知道invoke后面,方便你输入函数的简单描述。

:DoxAuthor则会自动将文件名,作者,时间等关键字自动填好,十分方便。

当然,你也可以按照自己的配置来修改doxygenToolkit.vim

 

3)        配置并运行doxygen

        doxygen的配置文件是一个文本文件,理论上你可以自己来直接修改。不过还有更省事的方法:doxygen为我们提供了doxywizard图形配置工具。doxywizard的功能十分直观,用起来很简单,在此不加赘述。进行配置之后,将配置文件存到工作目录下,运行doxygen。默认情况下,doxygen会产生html格式的文档,这些文件都会保存在工作目录的html子目录下面。之后,可以通过浏览器来打开html子目录下的index.html页面来查看为这个工程生成的文档。当然,如果你需要生成其他格式的文档,可以进行相应的配置。

doxygen配置文件的细节,我就不一一细述了,你可以去查阅更多的资料J

下图为Windows操作系统下doxygen的图形配置程序doxygenWizard

4)        编译成chm

        使用chm格式的文件来作为程序的文档可以使文档更加便于管理,现在也有越来越多的文档用chm格式发布。doxygen也可以支持编译生成chm格式的文件。这时候,你需要在doxygen的配置文件里设置以下选项(打开chm的支持,并配置htmlworkshop的位置):

GENERATE_HTMLHELP = YES

HHC_LOCATION           = "C:/Program Files/HTML Help Workshop/hhc.exe" (如果hhc已经在系统的路径里,那么此处可以不填)

        这样,doxygen在产生文档的时候会同时产生hhp后缀的文件,并自动运行HHC来帮你编译生成CHM的文件。当然,你也可以在Html Help Workshop里面用hhp文件来手动chm文件了。Html Help Workshop可以在各大软件站点上找到或者去微软的站点上下载:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/htmlhelp/html/hwMicrosoftHTMLHelpDownloads.asp

5)        一些配置选项

我比较经常进行更改的doxyfile选项有:

INPUT                  = . ../include         项目的路径(用空格隔开,可以用引号括起来)

HIDE_UNDOC_MEMBERS     = NO             是否需要隐藏未注释的成员

SOURCE_BROWSER         = YES             是否显示源程序

GENERATE_HTML          = YES               生成html格式的文档

GENERATE_HTMLHELP      = YES             生成chm文件

CHM_FILE               = show.chm         chm文件的名字

HHC_LOCATION           = "C:/Program Files/HTML Help Workshop/hhc.exe"            hhc的路径

HAVE_DOT                      = YES                      支持图形扩展

……

Dot图形扩展

        doxygen的配置中打开DOT选项后,doxygen可以帮你生成十分眩目的图形支持,使项目文档更加直观、易读。

        为了能够使用Dot图形扩展,你需要首先安装graphviz,这是一个免费的图形库扩展,可以从http://graphviz.org 下载。下载完Dot并安装完毕之后,需要在doxygen文件中将以下选项打开:

HAVE_DOT = YES

进行相关DOT选项的设置之后,就可以生成带图形支持的文档了,这可以让你的文档增色不少。以下是一个函数调用关系图的范例(这是doxygen项目中的一个函数)


doxygen方便扩展吗?

        尽管doxygen已经包含了许多最通用的文件类型的支持,你也许还希望能够让其为你自定义的某种语言生成文档,或者对某个功能进行调整。这时候,你可以添加一些额外的代码,并将源代码重新编译一遍。(当然,你也可以让作者添加对新语言的支持并发布新版本,呵呵)

        doxygen项目的大部分代码是C++文件,大部分的代码解析工作是在*Scanner类里面进行的(目前包含CLanuageScannerPythonLanuageScanner,前者处理所有类C的语言类型,后者是1.5新添加的针对python的类)。这些*Scanner是由lex语法解析器来自动生成的,可以通过修改scanner.lpyscanner.l这两个文件来修改一些细节的处理。这些l文件中大量使用了lexstart condition,使所做修改不会轻易破坏已有的功能,比较方便。如果你所要添加的这种语言是类C结构的,也许只需要把这个文件类型添加到已有的C语言框架里就可以让一切正常工作。

        修改完毕之后,将整个项目重新编译一遍,make程序将自动更新*Scanner类的内容,并将你所做的修改应用到doxygen程序上。调试之,就大功告成了。

小结

         doxygen+VIM+doxygenToolkit.vim+Html Help Workshop = 注释->简单的文档解决方案

         doxygen还有众多十分有用的关键字和其它的功能,有兴趣的朋友可以好好去发掘发掘。doxygen的主页上也有很多很有用的讨论,值得去好好看看。

         lex感兴趣的朋友可以去看看doxygenscanner.l文件,肯定会有比较大的收获。


相关文章推荐

Notes for C programmers

Comments: The most important comments are those at the beginning or in a separate file. They should ...

From C to C++: A quick reference for aging programmers

一篇比较精炼的从C到C++语言语法过度的博文,尽管不完美,但值得借鉴。 转自:http://triptico.com/docs/c2cpp.html So you were a great sys...
  • GISSTAR
  • GISSTAR
  • 2011年10月18日 10:30
  • 628

The Ten Commandments for C Programmers

The Ten Commandments  for C Programmers (Annotated Edition)by Henry Spencer1Thou shalt run lint  ...

Objective-C规范注释心得——同时兼容appledoc(docset、html)与doxygen(html、pdf)的文档生成

手工写文档是一件苦差事,幸好现在有从源码中抽取注释生成文档的专用工具。对于Objective-C来说,目前最好用的工具是appledoc和doxygen。可是这两种工具对于注释的要求略有区别。于是我经...
  • muyu114
  • muyu114
  • 2013年07月24日 17:56
  • 7644

用doxygen为C/C++程序自动生成文档

这几天有人问起关于文档生成工具的问题,个人觉得 doxygen 是一个不错的由C/C++ 注释自动生成文档的工具软件。在这里简单说明一下 doxygen 的使用,供大家参考。 一、doxygen 简...
  • yuyin86
  • yuyin86
  • 2012年09月20日 08:46
  • 757

用Doxygen为objective-c代码生成文档

原文见: http://www.dreamingwish.com/dream-2011/use-doxygen-to-generate-documentation-objective-c-code.h...

C/C++文档注释神器——Doxygen常用知识整理(持续更新)

C/C++文档注释神器——Doxygen常用知识整理(持续更新) 分类: C++2010-04-14 20:48 772人阅读 评论(0) 收藏 举报 Doxygen是什么 Do...

使用doxygen为C/C++程序生成中文文档

按照约定的格式注释源代码,用工具处理注释过的源代码产生文档。通过这种方式产生文档至少有以下好处:便于代码和文档保持同步。 可以对文档做版本管理。 很多编程语言都有类似的文档工具,例如:Java有jav...

IOS学习笔记-9Objective-C规范注释心得——同时兼容appledoc(docset、html)与doxygen(html、pdf)的文档生成

原文转载地址:http://www.cnblogs.com/zyl910/archive/2013/06/07/objcdoc.html 手工写文档是一件苦差事,幸好现在有从源码中抽取注释生...

Windows下用Doxygen轻松为c,c++,java编写源码文档、协助源码分析

一、缘起为源码编写文档是件累人的事,看别人的源码更是一件累人的事。之前用过大名鼎鼎的JavaDoc(只能用于Java),后来用doxygen(可用于c、c++、java),虽然好用,但有两个问题:1,...
  • c80486
  • c80486
  • 2011年07月08日 00:05
  • 1166
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:doxygen+VIM文档实用指南for C/C-liked Programmers
举报原因:
原因补充:

(最多只允许输入30个字)