DOXYGEN 资料收集

11 篇文章 0 订阅
7 篇文章 0 订阅
标题  便利的开发文档工具-doxygen     选择自 mounTon 的 Blog
关键字  便利的开发文档工具-doxygen
出处 
 

便利的开发文档工具-doxygen
mounton @ {www.ihere.org} ( mount0n@yahoo.com)
2003年8月

0. 序言
为代码写注释一直是大多数程序员有些困扰的事情。当前程序员都能接受为了程序的可维护性、可读性编码的同时写注释的说法,但对哪 些地方应该写注释,注释如何写,写多少等这些问题,很多程序员仍然没有答案。更头痛的是写文档,以及维护文档的问题,开发人员通常可以忍受编写或者改动代 码时编写或者修改对应的注释,但之后需要修正相应的文档却比较困难。如果能从注释直接转化成文档,对开发人员无疑是一种福音。而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文档系统。而国内的开发人员却使用的不 多,这里从开发人员使用的角度介绍这个工具,使开发人员用最少的代价尽快掌握这种技术,并结合这个工具探讨如何撰写注释的问题。以下以linux下的C+ +语言为例进行介绍,以下讨论基于doxygen1.3.3。

1. doxygen使用步骤
由于只是工具的使用,这里不介绍它的原理,直接从使用步骤开始。Doxygen的使用步骤非常简单。主要可以分为:
 1)第一次使用需要安装doxygen的程序
 2)生成doxygen配置文件
 3)编码时,按照某种格式编写注释
 4)生成对应文档
doxygen的安装非常简单, linux下可以直接下载安装包运行即可,下载源代码编译安装也是比较通用的编译安装命令。请参考其安装文档完成安装。

Doxygen在生成文档时可以定义项目属性以及文档生成过程中的很多选项,使用下面命令能够产生一个缺省的配置文件:
doxygen -g  [配置文件名]
可以根据项目的具体需求修改配置文件中对应的项,具体的修改过程在下面介绍。修改过的配置文件可以作为以后项目的模板。

让doxygen自动产生文档,平常的注释风格可不行,需要遵循doxygen自己的格式。具体如何写doxygen认识的注释在第3节详细介绍。

OK,代码编完了,注释也按照格式写好了,最后的文档是如何的哪?非常简单,运行下面的命令,相应的文档就会产生在指定的目录中。
  doxygen [配置文件名]

需要注意的是doxygen并不处理所有的注释,doxygen重点关注与程序结构有关的注释,比如:文件、类、结构、函数、变量、宏等注释,而忽略函数内变量、代码等的注释。

2. doxygen配置文件
doxygen配置文件的格式是也是通常的unix下配置文件的格式:注释'#'开始;tag = value [,value2…];对于多值的情况可以使用 tag += value [,value2…]。

对doxygen的配置文件的修改分为两类:一种就是输出选项,控制如何解释源代码、如何输出;一种就是项目相关的信息,比如项目名称、源代码目 录、输出文档目录等。对于第一种设置好后,通常所有项目可以共用一份配置,而后一种是每个项目必须设置的。下面选择重要的,有可能需要修改的选项进行解释 说明,其他选项在配置文件都有详细解释。

TAG 缺省值 含义
PROJECT_NAME  项目名称
PROJECT_NUMBER  可以理解为版本信息
OUTPUT_DIRECTORY  输出文件到的目录,相对目录(doxygen运行目录)或者绝对目录
INPUT  代码文件或者代码所在目录,使用空格分割
FILE_PATTERNS *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp *.h++ *.idl *.odl 指定INPUT的目录中特定文件,如:*.cpp *.c *.h
RECURSIVE NO 是否递归INPUT中目录的子目录
EXCLUDE  在INPUT目录中需要忽略的子目录
EXCLUDE_PATTERNS  明确指定的在INPUT目录中需要忽略的文件,如:FromOut*.cpp
  
OUTPUT_LANGUAGE English 生成文档的语言,当前支持2、30种语言,国内用户可以设置为Chinese
USE_WINDOWS_ENCODING YES(win版本)
NO(unix版本) 编码格式,默认即可。
EXTRACT_ALL NO 为NO,只解释有doxygen格式注释的代码;为YES,解析所有代码,即使没有注释。类的私有成员和所有的静态项由EXTRACT_PRIVATE和 EXTRACT_STATIC控制
EXTRACT_PRIVATE NO 是否解析类的私有成员
EXTRACT_STATIC NO 是否解析静态项
EXTRACT_LOCAL_CLASSES YES 是否解析源文件(cpp文件)中定义的类
SOURCE_BROWSER NO 如果为YES,源代码文件会被包含在文档中
INLINE_SOURCES NO 如果为YES,函数和类的实现代码被包含在文档中
ALPHABETICAL_INDEX NO 生成一个字母序的列表,有很多类、结构等项时建议设为YES
GENERATE_HTML YES 是否生成HTML格式文档
GENERATE_HTMLHELP NO 是否生成压缩HTML格式文档(.chm)
GENERATE_LATEX YES 是否乘车latex格式的文档
GENERATE_RTF NO 是否生成RTF格式的文档
GENERATE_MAN NO 是否生成man格式文档
GENERATE_XML NO 是否生成XML格式文档
  

3. doxygen注释
3.1 注释风格
下面是工作量最大部分,安装doxygen格式写注释。通常代码可以附上一个注释块来对 代码进行解释,一个注释块由一行或者多行组成。通常一个注释块包括一个简要说明(brief)和一个详细说明(detailed),这两部分都是可选的。 可以有多种方式标识出doxygen可识别的注释块。
1)JavaDoc类型的多行注释。
/**
 *  ….text….
 */
2)QT样式的多行注释。
/*!
….text….
 */
3) /// …text….
4) //! …text….
简要说明有多种方式标识,这里推荐使用@brief命令强制说明,例如:
/**
 * @brief [some brief description ]
 *      [ brief description more. ]
 *
 * [some more detailed description…]
 */
以上这些注释格式用来对紧跟其后的代码进行注释。doxygen也允许把注释放到代码后面,具体格式是放一个'<'到注释开始部分。例如:
int var1 ; /**< ….text…. */
int var2; ///< ….text….

注释和代码完全分离,放在其他地方也是允许的,但需要使用特殊的命令加上名称或者声明进行标识,比如:class、struct、union、 enum、fn、var、def、file、namespace、package、interface(这些也就是doxygen关注的注释类型)。这里 不推荐使用,建议注释尽量放在代码前后。具体使用方式参见doxygen手册。

3.2 doxygen常用注释格式
通常的选择上面的一、两种注释风格,遇到头文件中各种类型定义,关键变量、宏的定义,在其前或者后使用 @brief 定义其简要说明,空一行后继续写其详细的注释即可。

对函数的注释,是比较常常需要注释的部分。除了定义其简要说明以及详细注释,还可以使用param命令对其各个参数进行注释,使用return命令对返回值进行注释。常见的格式如下:
/**
 *@brief func's brief comment.
 *
 * Some detailed comment.
 *@param a [param a 's comment.]
 *@param b [param b 's comment.]
 *@exception std::out_of_range [exception's comment.]
 *@return [return's comment.]
 */
int func1(int a, int b);

进行设计时,通常有模块的概念,一个模块可能有多个类或者函数组成,完成某个特定功能的代码的集合。如何对这个概念进行注释?doxygen提供了group的概念,生成的模块的注释会单独放在一个模块的页面中。使用下面的格式定义一个group。
/** [group_name] [brief group description ]
 * detailed group description ]
 * @{
*/
code
/** @} */
group中的代码可以有自己的注释。单纯定义一个模块,去除{ 和}命令即可。任何其他代码项(比如类、函数、甚至文件)如果要加入到某个模块,可以在其doxygen注释中使用ingroup命令即可。Group之间使用ingroup命令,可以组成树状关系。
/** @file util.cpp
* @ingroup [group_name]
 * @brief file's brief info.
 */
把多个代码项一起添加到某个模块中可以使用addtogroup命令,格式和defgroup相似。

对于某几个功能类似的代码项(比如类、函数、变量)等,如果希望一起添加注释,而又不想提升到模块的概念,可以通过下面的方式:
//@{
/** Comments for all below code. */
code…
//@}
对这种组进行命名可以使用name命令。此时中间代码可以有自己的注释。如:
/** @name group_name
 * description for group.
 */
//@{
code…
//@}

3.3 doxygen常用注释命令
doxygen通过注释命令识别注释中需要特殊处理的注释,比如函数的参数、返回值进行突出显示。上面也提到了一些注释命令(如:brief、param、return、以及group相关的命令),下面对其他一些常用的注释命令进行解释说明。
@exception <exception-object> {exception description} 对一个异常对象进行注释。
@warning {warning message } 一些需要注意的事情
@todo { things to be done }  对将要做的事情进行注释
@see {comment with reference to other items } 一段包含其他部分引用的注释,中间包含对其他代码项的名称,自动产生对其的引用链接。
@relates <name> 通常用做把非成员函数的注释文档包含在类的说明文档中。
@since {text} 通常用来说明从什么版本、时间写此部分代码。
@deprecated
@pre { description of the precondition } 用来说明代码项的前提条件。
@post { description of the postcondition } 用来说明代码项之后的使用条件。
@code 在注释中开始说明一段代码,直到@endcode命令。
@endcode 注释中代码段的结束。

到此为止,常用的doxygen的注释格式讨论完毕,我们能够按照一定的格式撰写doxygen认识的注释,并能够使用doxygen方便快捷的生成对应的文档,不过注释中应该写些什么,如何撰写有效的注释可能是困扰开发人员的一个更深层次的问题。

4. 注释的书写
注释应该怎么写,写多还是写少。过多的注释甚至会干扰对代码的阅读。写注释的一个总的原则就是注释应该尽量用来表明作者的 意图,至少也应该是对一部分代码的总结,而不应该是对代码的重复或者解释。对代码的重复或者解释的代码,看代码可能更容易理解。反映作者意图的注释解释代 码的目的,从解决问题的层次上进行注释,而代码总结性注释则是从问题的解答的层次上进行注释。

推荐的写注释的过程是首先使用注释勾勒出代码的主要框架,然后根据注释撰写相应的代码。对各种主要的数据结构、输出的函数、多个函数公用的变量进行详细地注释。对代码中控制结构,单一目的的语句集进行注释。下面是一些写注释时需要注意的要点:
  避免对单独语句进行注释;
  通过注释解释为什么这么做、或者要做什么,使代码的读者可以只阅读注释理解代码;
  对读者可能会有疑问的地方进行注释;
  对数据定义进行注释,而不是对其使用过程进行注释;
  对于难于理解的代码,进行改写,而不要试图通过注释加以说明;
  对关键的控制结构进行注释;
  对数据和函数的边界、使用前提等进行注释;

5. 参考资料
 1. doxygen homepage
 http://www.stack.nl/~dimitri/doxygen/

 2. doxygen manual
 http://www.stack.nl/~dimitri/doxygen/manual.html

 3. Code Complete: A Practical Handbook of Software Construction. Redmond, Wa.: Microsoft Press, 880 pages, 1993. ISBN: 1-55615-484-4.
 
 4. 简介doxygen
 http://www.stack.nl/~dimitri/doxygen/doxygen_intro_cn.html
 
 5. 10 Minutes to document your code
 http://www.codeproject.com/tips/doxysetup.asp

 6. 使用doxygen
 http://www.csdn.net/Develop/article/16%5C16383.shtm










簡介Doxygen


作者: Gary W. Lee


什麼是Doxygen?

Doxygen 是一個程式的文件產生工具,可將程式中的特定註解轉換成為說明文件。通常我們在寫程式時,或多或少都會寫上註解,但是對於其他人而言,要直接探索程式裡的 註解,與打撈鐵達尼號同樣的辛苦。大部分有用的註解都是屬於針對函式,類別等等的說明。所以,如果能依據程式本身的結構,將註解經過處理重新整理成為一個 純粹的參考手冊,對於後面利用您的程式碼的人而言將會減少許多的負擔。不過,反過來說,整理文件的工作對於您來說,就是沈重的負擔。

一個好的程式設計師,在寫程式時,都會在適當的地方加上合適的註解。如果,能夠在撰寫註解時,稍微符合某種格式,接著就可以透過一個工具程式依據程式結構及您的註解產生出漂亮的文件。這將令許多工作繁重的程式設計師有時間多喝幾杯咖啡。

Doxygen 就是這樣的一個工具。在您寫註解時,稍微按照一些它所制訂的規則。接著,他就可以幫您產生出漂亮的文件了。因此,Doxygen 的使用可分為兩大部分。首先是特定格式的註解撰寫,第二便是利用Doxygen的工具來產生文件。

目前Doxygen可處理的程式語言包含:
  • C/C++
  • Java
  • IDL (Corba, Microsoft及KDE-DCOP類型)  
而可產生出來的文件格式有:
  • HTML
  • XML
  • LaTeX
  • RTF
  • Unix Man Page
而其中還可衍生出不少其他格式。如有了LaTeX 文件後,就可以透過一些工具產生出PS或是PDF檔案。

在多國語言的支援方面,Doxygen 目前可支援的約有2,30種。自Doxygen 1.2.16開始支援繁體中文(這正是小弟做的好事)。所以在目前一些Open Source 的程式文件產生器中,Doxygen 算是相當完整的一套。在程式語言處理上面,Doxygen也算是少數在Borland C++ Builder 的語法下還能夠正常運作的工具之一(若非如此,小弟也不會推薦它)。

本文的目的是希望在經過仔細閱讀本文之後能夠給大家一個概略性的瞭解。以便可以很容易的上手使用Doxygen。至於Doxygen本身的詳細使用,各位可以參考隨著Doxygen 所附的文件。實際上,Doxygen 自己的使用手冊就是使用Doxygen 產生的。您可以看到他實際上能夠產生遠比Reference Book更複雜的文件。


安裝Doxygen

Doxygen 的安裝可說十分的簡單,本文僅介紹binary檔案的安裝,若您有興趣從source code重新compile起來,請自行查閱參考手冊。

首先,請您先至 doxygen 的網站上面抓取最新版本的doxygen 回來。目前,只要您是Linux, Solaris, Mac OS X, HP-UX, 甚至是UnixWare,都有compile好的binary版本可以抓取。如果是Windows 95/98/ME/NT/2000/XP,甚至還有Setup的版本可以抓取。所以安裝過程可說十分簡單。只要給予正確的安裝目錄,相信一般在安裝上是不會遇到什麼問題的。

另外,如果您是Linux或是Windows,可以另外抓取Doxygen Wizard的程式。這是一個輔助工具,可以很快的幫您建立一個Doxygen 的組態檔案。透過這個組態檔案,您就可以很快的將文件產生出來。另外,若沒有使用Doxygen Wizard,還是可以使用一般的文字編輯器將這個組態檔製作出來。

若安裝成功,您應該可以看到doxygen 這個執行檔出現在您的系統中。若是Windows 平台,則可看到在程式集中有Doxygen 這個Folder出現。


設定Project的doxygen組態

Doxygen 產生文件可以分為三個步驟。一是為Project 建立組態檔,二是在程式碼中加上符合Doxygen所定義註解格式。三是使用Doxygen來產生註解。

因此,第一步就是為您的Project 製作Doxygen 的組態檔案。這個所謂的組態檔案,格式其實與很簡單。就是一些Key 與值的設定。每個設定為一行。若第一行開頭為"#" 表示該行為註解。Doxygen 會忽略它。每個設定行的格式有兩種,分別如下:
TAG = value [value, ...]

TAG += value [value, ...]
第一種形式是最常見的,也就是要設定一個TAG (也就是一個Key ),他的值為右邊所定義的部分。原則上每個值都是單一的英文字,如果您要定義的值有空白字元包含在內,可使用雙引號將它括住。如果要定義的值超過一個以上,可使用逗號","予以分隔開來。

如果您要定義的TAG 是屬於表列型態的,也就是他會有很多的值分別以逗號隔開。在Doxygen 組態檔中允許您在不同的地方重複定義。只是後面的定義應使用上面所說的第二種形式。此種形式會將前後兩個定義的值合併在一起。

知道這個基本格式後,剩下就是根據各個TAG 的意義來進行設定。關於TAG 的定義很多,此處我們僅針對必要用到的TAG 進行說明,剩下的部分請自行翻閱使用說明。

由於Doxygen 的TAG 還算不少,為了方便使用,Doxygen 自身提供了一個方便的選項,可以幫您建立一份空白的Doxygen檔案(Doxygen 是Doxygen 預設的組態檔名)。

> doxygen Doxygen
   
透過這個命令,您可以得到一個Doxygen 檔案,接下來就可使用一般的文字編輯器來進行編輯。

下面將針對幾個必要的TAG 進行說明:

PROJECT_NAMEProject 的名字,以一個單字為主,多個單字請使用雙引號括住。
PROJECT_VERSION
Project的版本號碼。
OUTPUT_DIRECTORY
輸出路徑。產生的文件會放在這個路徑之下。如果沒有填這個路徑,將會以目前所在路徑來作為輸出路徑。
OUTPUT_LANGUAGE
輸出語言。預設為English。1.2.16 版後,您可以使用Chinese-Traditional 來輸出中文繁體的格式。
INPUT
指定載入或找尋要處理的程式碼檔案路徑。這邊是一個表列式的型態。並且可指定檔案及路徑。舉例來說若您有a.c, b.c, c.c 三個檔案。您可使用INPUT = a.c, b.c, c.c 的方式。若您給定一個目錄,該目錄下面所有檔案都會被處理。
FILE_PATTERNS
如果您的INPUT Tag 中指定了目錄。您可以透過這個Tag來要求Doxygen在處理時,只針對特定的檔案進行動作。例如:您希望對目錄下的副檔名為.c, .cpp及.h的檔案作處理。您可設定FILE_PATTERNS = *.c, *.cpp, *.h。    
RECURSIVE
這是一個布林值的Tag,只接受YES或NO。當設定為YES時,INPUT所指定目錄的所有子目錄都會被處理。                             
EXCLUDE
如果您有某幾個特定檔案或是目錄,不希望經過Doxygen處理。您可在這個Tag中指定。   
EXCLUDE_PATTERNS
 類似於FILE_PATTERNS的用法,只是這個Tag是供EXCLUDE所使用。
SOURCE_BROWSER
如果設定為YES,則Doxygen會產生出原始檔案的列表,以供查閱。
INLINE_SOURCES
如果設定為YES ,則程式碼也會被嵌入於說明文件中。                               
ALPHABETICAL_INDEX
如果設定為YES,則一個依照字母排序的列表會加入在產生的文件中。
GENERATE_HTML
若設定為YES ,就會產生HTML版本的說明文件。HTML文件是Doxygen預設產生的格式之一。
HTML_OUTPUT
HTML文件的輸出目錄。這是一個相對路徑,所以實際的路徑為OUTPUT_DIRECTORY加上HTML_OUTPUT。這個設定預設為html。      
HTML_FILE_EXTENSION
HTML文件的副檔名。預設為.html。
HTML_HEADER
要使用在每一頁HTML文件中的Header。如果沒有指定,Doxygen會使用自己預設的Header。
HTML_FOOTER
要使用在每一頁HTML文件中的Footer。如果沒有指定,Doxygen會使用自己預設的Footer。
HTML_STYLESHEET
您可給定一個CSS 的設定,讓HTML的輸出結果更完美。
GENERATE_HTMLHELP
如設定為YES,Doxygen會產生一個索引檔。這個索引檔在您需要製作windows 上的HTML格式的HELP檔案時會用的上。
GENERATE_TREEVIEW
若設定為YES,Doxygen會幫您產生一個樹狀結構,在畫面左側。這個樹狀結構是以JavaScript所寫成。所以需要新版的Browser才能正確顯示。
TREEVIEW_WIDTH
用來設定樹狀結構在畫面上的寬度。
GENERATE_LATEX
設定為YES 時,會產生LaTeX 的文件。不過您的系統必需要有安裝LaTeX 的相關工具。   
LATEX_OUTPUT
LaTeX文件的輸出目錄,與HTML_OUTPUT用法相同,一樣是指在OUTPUT_DIRECTORY之下的路徑。預設為latex。                        
LATEX_CMD_NAME
LaTeX程式的命令名稱及檔案所在。預設為latex。                             
GENERATE_RTF
若設定為YES ,則會產生RTF 格式的說明檔。
RTF_OUTPUT
與HTML_OUTPUT 用法相同,用來指定RTF 輸出檔案路徑。預設為rtf。
GENERATE_MAN
若設定為YES ,則會產生Unix Man Page 格式的說明文件。
MAN_OUTPUT
與HTML_OUTPUT 用法相同,用來指定Man Page的輸出目錄。預設為man。
GENERATE_XML
若設定為YES ,則會產生XML 格式的說明文件。
ENABLE_PREPROCESSING
若設定為YES ,則Doxygen 會啟動C 的前置處理器來處理原始檔。               
PREDEFINED
可以讓您自行定義一些巨集。類似於gcc 中的-D選項。

若上面這些基本的Tag 都設定正確,接下來就是將您的Source Code
註解修改成為正確的格式。若您覺得用一般文字編輯器來編輯組態檔
很麻煩,建議您可以使用Doxygen Wizard這個工具程式。他可以很快
的建構出您所需要的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 ,都不妨依照他的格式將註解寫入,一方面是依照他的格式,並不會干擾您程式的運作。另一方面,Doxygen 所定義的都是基本程式註解應當要有的東西。撰寫清楚的註解是好的程式設計師應當的工作。


製作說明文件

當您前面所有的步驟都正確無誤執行後,只需要執行下面的命令就可建立出您要的文件了:

> doxygen Doxygen

如果有錯誤產生,請檢查您的Doxygen 組態檔設定是否有誤,目錄的存取權限是否足夠。如果輸出的結果不正確,請檢查您的註解是否符合格式。註解的位置是否正確。舉例來說,您不可在說明class 的註解與class 本身插入其他的程式碼或宣告。否則Doxygen 就無法將註解與該class對應起來。

如果您使用Doxygen Wizard,可直接使用上面的Run 的按鈕或選單項目來製作說明文件。如果是產生HTML文件,在HTML_OUTPUT 所指定的目錄中的index.html將是您說明文件的首頁。

在中文繁體方面,目前我僅成功製作出HTML與RTF 格式的說明文件。其他格式的過程比較複雜,需要搭配其他工具,有待各位自行嘗試。








Special Commands In Homepage:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值