使用doxygen
撰文 / K.Young 翻译 / 马维达 ( 已发表在《程序员》2002年第3期上) 一、介绍 GLAST 软件已采用 doxygen ( GNUGPL 软件)来作为文档工具,本文将对其进行简单的介绍。要了解更详细的信息及下载 doxygen 程序,请访问网站 什么是 doxygen 呢?下面的介绍录自 doxygen 的网页: “ doxygen 是一种用于 C++ 、 IDL ( Corba 、 Microsoft 和 KDE-2DCOP 风格)和 C 的文档系统。它可以通过三种方式来帮助你: 1. 它可以从一组标有文档的源文件中生成在线文档浏览器( HTML 格式),以及 / 或者离线参考手册( LATEX 格式)。同时还支持生成 RTF ( MS-Word )、 Postscript 、超链接 PDF 、压缩 HTML 和 UNIXman 页面格式的输出。文档是从源文件中直接提取的,从而十分容易保持文档和源码的一致。 2. 可配置 doxygen ,用以从没有标注文档的源文件中提取代码结构。这对于要在大量源文件中快速地找到所需的东西来说是非常有用的。通过 include 依赖图、继承图和协作图等手段(它们都是自动生成的),可以使不同成分之间的关系可视化。 3. 你甚至还可以“滥用” doxygen ,创建普通文档。” 二、 doxygen 注释风格 使用 doxygen 的第一步是在你的代码中插入 doxygen 风格的注释。你可以使用两种不同风格的 doxygen 注释: Qt 风格,专用文档块看起来是这样的:/*!
...text...
*/
还有单行版本:
file://!...onelineoftext... JavaDoc 风格,专用文档块看起来是这样的:
/**
*...text...
*/
还有单行版本:
///...onelineoftext...
doxygen–g<filename>
“ filename ”指定含有 doxygen 设置的文件的名字;如果不指定名字,该文件就叫作“ Doxyfile ”。使用 Doxyfile 时你可能想要设置一些参数。我将提及三个有趣的参数,其他的请参考 doxygen 主页。
● INPUT :此参数指定 doxygen 在其中搜索源码的目录。对于上面的例子,需要设置
INPUT=srcCalPack
● FILE_PATTERNS :此参数指定 doxygen 所要解析的文件的类型。对于上面的例子,
需要设置
FILE_PATTERNS=*.cpp*.h
● IMAGE_PATH :此参数指定 doxygen 在哪里查找使用 \image 命令包含的图像。对
于上面的例子(并且作为 GLAST 的惯例),需要设置
INCLUDE_PATH=doc/images 一旦你设置了这些参数以及其他任何你想要改变的参数,你就可以运行 doxygen 了。假定你的 Doxyfile 就叫作“ Doxyfile ”,执行 doxygenDoxyfile 它将解析你指定的所有文件。缺省地, HTML 输出将被放在叫作 html/ 的目录中(这也可以在 Doxyfile 中改变)。 译者注: 1. doxygen 有内建的多语言支持,目前支持 24 种语言,其中包括中文。具体用法请参考 doxygen 的参考手册。 2. GLAST 是 TheGammaRayLargeAreaSpaceTelescope (伽玛射线大区域空间望远镜)的缩写。主页在 访问其源码。 /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT:7PT'TIMESNEWROMAN'"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /PCLASS=MSONORMALSTYLE="MARGIN-LEFT:18PT;TEXT-INDENT:-18PT;WORD-BREAK:BREAK-ALL"> /PCLASS=MSONORMALSTYLE="WORD-BREAK:BREAK-ALL"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /PCLASS=MSONORMALSTYLE="WORD-BREAK:BREAK-ALL"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /PCLASS=MSONORMALSTYLE="MARGIN-LEFT:18PT;TEXT-INDENT:-18PT;WORD-BREAK:BREAK-ALL"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /PCLASS=MSONORMALSTYLE="MARGIN-LEFT:18PT;TEXT-INDENT:-18PT;WORD-BREAK:BREAK-ALL"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /PCLASS=MSONORMALSTYLE="WORD-BREAK:BREAK-ALL"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /PCLASS=MSONORMALSTYLE="TEXT-INDENT:21PT;WORD-BREAK:BREAK-ALL"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /PCLASS=MSONORMALSTYLE="WORD-BREAK:BREAK-ALL"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /PCLASS=MSONORMALSTYLE="TEXT-INDENT:21PT;WORD-BREAK:BREAK-ALL"> /PCLASS=MSONORMALSTYLE="WORD-BREAK:BREAK-ALL"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /PCLASS=MSONORMALSTYLE="WORD-BREAK:BREAK-ALL"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /PCLASS=MSONORMALSTYLE="TEXT-INDENT:21PT;WORD-BREAK:BREAK-ALL"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /PCLASS=MSONORMALSTYLE="TEXT-INDENT:21PT;WORD-BREAK:BREAK-ALL"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /PCLASS=MSONORMALSTYLE="TEXT-INDENT:21PT;WORD-BREAK:BREAK-ALL"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /PCLASS=MSONORMALSTYLE="WORD-BREAK:BREAK-ALL"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /PCLASS=MSONORMALSTYLE="WORD-BREAK:BREAK-ALL"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /PCLASS=MSONORMALSTYLE="TEXT-INDENT:21PT;WORD-BREAK:BREAK-ALL"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /LICLASS=MSONORMALSTYLE="MARGIN-BOTTOM:12PT;TEXT-ALIGN:LEFT;WORD-BREAK:BREAK-ALL"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /PCLASS=MSONORMALSTYLE="WORD-BREAK:BREAK-ALL"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /PCLASS=MSONORMALSTYLE="MARGIN-LEFT:18PT;TEXT-INDENT:-18PT;WORD-BREAK:BREAK-ALL"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT:7PT'TIMESNEWROMAN'"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT:7PT'TIMESNEWROMAN'"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /PCLASS=MSONORMALSTYLE="WORD-BREAK:BREAK-ALL"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /PCLASS=MSONORMALSTYLE="TEXT-INDENT:21PT;WORD-BREAK:BREAK-ALL"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /PALIGN=CENTERCLASS=MSONORMALSTYLE="TEXT-ALIGN:CENTER;TEXT-INDENT:42PT"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312"> /SPANSTYLE="FONT-FAMILY:楷体_GB2312">