自己已將學習了兩三次了吧,差不多這次該總結一下:
Doxygen是一種開源跨平台的,以類似JavaDoc風格描述的文檔系統,完全支持C、C++、Java、Objective-C和IDL語言,部分支持PHP、C#。注釋的語法與Qt-Doc、KDoc和JavaDoc兼容。Doxgen可以從一套歸檔源文件開始,生成HTML格式的在線類瀏覽器,或離線的LATEX、RTF參考手冊。
Doxygen 是一個程序的文件產生工具,可將程序中的特定批注轉換成為說明文件。通常我們在寫程序時,或多或少都會寫上批注,但是對於其它人而言,要直接探索程序里的批注,與打撈鐵達尼號同樣的辛苦。大部分有用的批注都是屬於針對函式,類別等等的說明。所以,如果能依據程序本身的結構,將批注經過處理重新整理成為一個純粹的參考手冊,對於后面利用您的程序代碼的人而言將會減少許多的負擔。不過,反過來說,整理文件的工作對於您來說,就是沉重的負擔。Doxygen 就是在您寫批注時,稍微按照一些它所制訂的規則。接着,他就可以幫您產生出漂亮的文檔了。因此,Doxygen 的使用可分為兩大部分。首先是特定格式的批注撰寫,第二便是利用Doxygen的工具來產生文檔。
參考的博文有:http://sunzhennian.blog.163.com/blog/static/1951730712011112210184592/
http://blog.csdn.net/flatcd/article/details/138678
http://blog.csdn.net/u012501459/article/details/37668893
http://blog.csdn.net/bigpudding24/article/details/45247357
各有各得點,自己在總結。
使用步驟
1、第一次使用需要安裝doxygen的程序
2、生成doxygen配置文件
3、編碼時,按照某種格式編寫注釋
4、生成對應文檔
1、安裝doxygen及其相關程序
1.1Doxygen下載
http://sourceforge.net/projects/doxygen/?source=dlp 進行下載
本文使用的為Doxygen 1.8.3.1
安裝,我們將在配置的時候使用doxywizard,Doxygen的GUI版本。
1.2HTML Help Workshop下載
如果你希望你的Doxygen自動生成chm,那么請下載HTML Help Workshop,我們將要使用當中的hcc.exe文件以及相關dll
http://www.microsoft.com/en-us/download/details.aspx?id=21138 進行下載
下載其中的htmlhelp.exe並安裝,記住安裝目錄,我們將在Doxygen配置時使用。
1.3 Graphviz
graphviz 是一個由AT&T實驗室啟動的開源工具包,用於繪制DOT語言腳本描述的圖形。Doxygen 使用 graphviz 自動生成類之間和文件之間的調用關系圖,如不需要此功能可不安裝該工具包。
安裝並記錄安裝目錄,同樣我們一會需要配置Doxygen
具體的作用是下面的:包括怎么生產Doxygen
首先在網上下載Doxygen,HTML Help Workshop。這兩個軟件直接在各自的官網上下載就行了。
然后使用doxywizard.exe生成一個Doxygen文件。點擊“D:\program files\Doxygen\doxygen\bin\doxywizard.exe”出現如下界面:在Wizard屬性頁主要需要改一個地方,點擊左側的“Output”將右側復選框中的LaTex中的鈎去掉;然后在Step1:下面指定Doxygen的工作目錄,就是這個向導生成的文件的存放路徑。
在"Wizard"和“Export”中還有許多可以編輯的參數,暫時不修改,以后熟悉了再改。然后點擊“Run”下面的“Run doxygen”就可以生成了腳本。
再點擊“File”菜單中的"Save as",就可以生成我們需要的腳本了,將生成的腳本命名為default.doxygen如圖:
default.doxygen就是普通的文本文件,在這里需要對它進行一些編輯,這些需要編輯的地方主要是字符編碼的問題,其實在前面的圖形化界面中也可以進行更改的。
主要需要修改的地方有如下幾處:
GENERATE_HTMLHELP = YES
OUTPUT_LANGUAGE = Chinese
CHM_INDEX_ENCODING = gb2312
DOXYFILE_ENCODING=gb2312
INPUT_ENCODING=gb2312
然后這個default.doxygen就處理好了。
接下來是在vs中集成這些工具方便以后使用了。將default.doxygen拷貝到需要生成文檔的工程下面
1.集成Doxygen
在VS環境中:Tools->External Tools->Add
Title: Doxygen
Command: D:\Program Files\doxygen\bin\doxygen.exe(doxygen的安裝目錄)
Arguments: $(ProjectDir)\default.doxygen
Initial directory: $(ProjectDir)
(可以把use output window復選框勾上)
點擊Tools->Doxygen,將會在工程目錄下生成html文件夾,里面的html文件就是自動生成的注釋文件。
2.集成CHM制作工具HTML Help Workshop
首先安裝HTML Help Workshop。
在VS環境中:Tools->External Tools->Add
Title: HTML Help Workshop
Command: D:\program files\Doxygen\htmlhelp\hhw.exe(HHW的安裝目錄)
Arguments: $(ProjectDir)html\index.hhp
Initial directory: $(ProjectDir)
點擊Tools->HTML Help Workshop,就會出現HHW的窗體,編譯,可得到index.chm文件。
注意:編譯時,會彈出一個窗口確認路徑名,而VS自動傳入的路徑名是有錯誤的,多了2個雙引號,去掉雙引號,編譯,就可以成功了。如下圖:
3.集成CHM文件查看工具hh.exe
在VS環境中:Tools->External Tools->Add
Title: ViewCHM
Command: C:\WINDOWS\hh.exe(windows自帶)
Arguments: $(ProjectDir)html\index.chm
Initial directory:
點擊Tools-> ViewCHM,就會看到index.chm文件了。
如果只要Html的注釋,應該不用安裝后面的兩個了!
2.配置Doxygen
2.1基本配置
在基本配置中,會介紹一些關於Doxygen的基本配置,例如各種亂碼,輸出內容等。
首先我們打開開始-》所有程序-》Doxygen-》doxywizard
第一步,選擇你的工作目錄(配置文件位置 D:\Doxygen),點擊Select。
第二步,進行配置
Wizard選項卡:
首先修改Project name,選擇掃描源代碼的目錄,Source code directory:,勾選Scan recursively (遞歸掃描),之后選擇輸出目錄,作為測試選擇桌面進行查看。
在Wizard的Topics下的Mode,選擇All Entities,可以輸出相對完整的功能,是否包含源代碼看你自身情況,在下面選擇好你的語言。這里作者使用的是C# 所以選擇Java or C#
在Output中,如果你需要輸出chm格式,請勾選。
在Diagrams中選擇使用GraphViz包,來輸出UML
Expert選項卡:
說明:編碼格式,UTF-8 是首選。如果需要顯示中文則選擇GB2312.
TAB_SIZE 主要是幫助文件中代碼的縮進尺寸,譬如@code和@endcode段中代碼的排版,建議設置成4。
Build頁面,這個頁面是生成幫助信息中比較關鍵的配置頁面:
EXTRACT_ALL 表示:輸出所有的函數,但是private和static函數不屬於其管制。
EXTRACT_PRIVATE 表示:輸出private函數。
EXTRACT_STATIC 表示:輸出static函數。同時還有幾個EXTRACT,相應查看文檔即可。
SHOW_INCLUDE_FILES 表示:是否顯示包含文件,如果開啟,幫助中會專門生成一個頁面,里面包含所有包含文件的列
表。
INLINE_INFO :如果開啟,那么在幫助文檔中,inline函數前面會有一個inline修飾詞來標明。
SORT_MEMBER_DOCS :如果開啟,那么在幫助文檔列表顯示的時候,函數名稱會排序,否則按照解釋的順序顯
示。
說明:INPUT_ENCODING (輸入的源文件的編碼),要與源文件的編碼格式相同。如果源文件不是UTF-8編碼最好轉一下。
總結:我查看到我的代碼文件是utf-8的(vs2013中打開文件 選另存為可看到編碼格式)((VS2012的話):文件->高級保存選項)。
在Expert的HTML中,首先要看HHC_LOCATION選項,添加安裝目錄(注:作者目錄為C:/Program Files (x86)/HTML Help Workshop/hhc.exe)
勾選CHM_INDEX_ENCODING,在你源代碼中的字符集是什么就填寫什么,
之后在Expert的Dot中勾選CLASS_DIAGRAMS,UML_LOOK
為了減少chm體積,在DOT_IMAGE_FORMAT中選擇gif或者jpg,均可。
最后選擇好DOT_PATH所輸出的位置。

Error: When enabling GENERATE_HTMLHELP the search engine (SEARCHENGINE) should be disabled. I'll do it for you.
warning: The selected output language "chinese" has not been updated
since release 1.8.2. As a result some sentences may appear in English.
解決:把HTML里面的SEARCHENGINE設置為NO
3、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;
}