在VS2103環境中集成Doxygen工具


自己已將學習了兩三次了吧,差不多這次該總結一下:

       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所輸出的位置。

點擊 Run doxygen 按鈕, Doxygen 就會從源代碼中抓取符合規范的注釋生成你定制的格式的文檔。
幾個錯誤:

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

 

接下來的工作就是學習 doxygen 的注釋規范了,參考 《doxygen 快速入門》第 2 節 “常用注釋語法”。慢慢的就可以體會到 doxygen 的方便性。

 

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;
    }    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM