文檔生成工具——Doxygen


 

參考:

1.https://blog.csdn.net/liao20081228/article/details/77322584

2.https://blog.csdn.net/wang15061955806/article/details/50978195  (有詳細格式)

 

 


                                  

  版權聲明本文章轉載自Jhuster《Doxygen詳細介紹》未經作者允許,嚴禁用於商業出版,否則追究法律責任。網絡轉載請注明出處,這是對原創者的起碼的尊重!!!


1 簡介

  為代碼寫注釋一直是大多數程序員有些困擾的事情。更頭痛的是寫文檔,以及維護文檔的問題,而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文檔系統。 

2 Doxygen配置文件

2.1   生成Doxygen配置文件

  運行Doxywizard創建配置文件。可以直接點“Save…”按鈕,將保存默認的配置文件,名為Doxyfile,內容是Doxygen的默認設置。Doxyfile是普通文本文件,可以直接打開手動編輯。不過在Doxywizard的界面上填寫也很方便,每個參數都有詳細提示。建議用Doxywizard完成第一次設置。以后如果需要調整個別參數,可以直接編Doxyfile。   上述Doxywizard界面中提供了生成Doxygen文檔的4個步驟,按照上述步驟一步步執行就可以生成漂亮的文檔了。   第一步是生成配置文件,提供三種方式:

  • Wizard方式指簡約方式,在其中只提供一些重要的參數設置,其余的均為默認值;
  • Expert方式為詳細設置方式,通過該選項可以詳細地配置Doxygen的各個配置項; 
  • Load方式,用於導入以前生成的Doxygen配置文件,導入后可以再點擊Expert進行修改。

2.2    配置選項含義詳解

選項 含義
DOXYFILE_ENCODING Doxygen文件的編碼方式,默認為UTF-8,若希望支持中文,最好設置為 GB2312
PROJECT_NAME Project 的名字,以一個單詞為主,多個單詞請使用雙引號括住。
PROJECT_VERSION Project的版本號碼。
OUTPUT_DIRECTORY 輸出路徑。產生的文件會放在這個路徑之下。如果沒有填這個路徑,將會以目前所在路徑作為輸出路徑。
OUTPUT_LANGUAGE 輸出語言, 默認為English 。
EXTRACT_ALL 為NO,只解釋有doxygen格式注釋的代碼;為YES,解析所有代碼,即使沒有注釋
EXTRACT_PRIVATE 是否解析類的私有成員
EXTRACT_STATIC 是否解析靜態項
EXTRACT_LOCAL_CLASSES 是否解析源文件(cpp文件)中定義的類
INPUT 指定加載或找尋要處理的程序代碼文件路徑。這邊是一個表列式的型態。並且可指定檔案及路徑。
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,則一個依照字母排序的列表會加入在產生的文件中。(有很多類、結構等項時建議設為YES)
GENERATE_HTML 若設定為YES ,就會產生HTML版本的說明文件。HTML文件是Doxygen預設產生的格式之一。
HTML_OUTPUT HTML文件的輸出目錄。這是一個相對路徑,所以實際的路徑為OUTPUT_DIRECTORY加上HTML_OUTPUT。這個設定預設為html。
GENERATE_HTMLHELP 是否生成壓縮HTML格式文檔(.chm)
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選項。
CLASS_DIAGRAMS 這個標記用來生成類繼承層次結構圖。要想生成更好的視圖,可以從 Graphviz 下載站點 下載 dot 工具。Doxyfile 中的以下標記用來生成圖表:
HAVE_DOT 如果這個標記設置為 Yes,doxygen 就使用 dot 工具生成更強大的圖形,比如幫助理解類成員及其數據結構的協作圖。注意,如果這個標記設置為 Yes, 標記就無效了
CLASS_GRAPH 如果  標記和這個標記同時設置為 Yes,就使用 dot 生成繼承層次結構圖
GRAPHICAL_HIERARCHY 設置為YES時,將會繪制一個圖形表示的類圖結構

3 Doxygen的注釋風格

3.1 綜述

  在每個代碼項中都可以有兩類描述, 這兩類描述將在文檔中格式化在一起: brief描述和detailed。 兩種都是可選的,但不能同時沒有。,簡述(brief)就是在一行內簡述地描述。而詳細描述(detailed description)則提供更長, 更詳細的文檔。   Doxygen支持c風格注釋、c++風格注釋以及javaDoc風格注釋等,下面將分別予以介紹。 若需要通過Doxygen生成漂亮的文檔,一般有如下幾個地方需要使用Doxygen支持的風格進行注釋:

  • 文件頭(包括.h和.cpp)     主要用於聲明版權,描述本文件實現的功能,以及文件版本信息等
  • 類的定義     主要用於描述該類的功能,同時也可以包含使用方法或者注意事項的簡要描述
  • 類的成員變量定義     在類的成員變量上方,對該成員變量進行簡要地描述
  • 類的成員函數定義     在類定義的成員函數上方,對該成員函數功能進行簡要描述
  • 函數的實現在函數的實現代碼處,詳細描述函數的功能、參數的含義、返回值的含義、使用本函數需要注意的問題、本函數使用其他類或函數的說明等

3.2 Doxygen支持的指令

  可以在注釋中加一些Doxygen支持的指令,主要作用是控制輸出文檔的排版格式,使用這些指令時需要在前面加上“\”或者“@”(JavaDoc風格)符號,告訴Doxygen這些是一些特殊的指令,通過加入這些指令以及配備相應的文字,可以生成更加豐富的文檔,下面對比較常用的指令做一下簡單介紹。

指令 說明
@file 檔案的批注說明。
@author 作者的信息
@brief 用於class 或function的簡易說明eg:@brief 本函數負責打印錯誤信息串
@param 主要用於函數說明中,后面接參數的名字,然后再接關於該參數的說明
@return 描述該函數的返回值情況eg:@return 本函數返回執行結果,若成功則返回TRUE,否則返回FLASE
@retval 描述返回值類型,eg:@retval NULL 空字符串。
@note 注解
@attention 注意
@warning 警告信息
@enum 引用了某個枚舉,Doxygen會在該枚舉處產生一個鏈接,eg:@enum CTest::MyEnum
@var 引用了某個變量,Doxygen會在該枚舉處產生一個鏈接,eg:@var CTest::m_FileKey
@class 引用某個類,格式:@class <name> [<header-file>] [<header-name> ],eg:@class CTest "inc/class.h"
@exception 可能產生的異常描述,eg:@exception 本函數執行可能會產生超出范圍的異常

3.3  JavaDoc風格的注釋

3.3.1 概述

  JavaDoc風格的注釋風格主要使用下面這種樣式:即在注釋塊開始使用兩個星號‘*‘

/** description * description * description */ 
  • 1
  • 2
  • 3
  • 4

3.3.2    簡述與詳述的方式

  Doxygen支持的塊(類、函數、結構體等)的注釋描述分為兩種:簡述 和 詳述。一般注釋的描述由簡述開始,經過特殊分隔方式后,后面緊跟詳述的內容,javaDoc風格可以使用的分隔方法有以下兩種:

  • 使用 \brief 參數標識,空行作為簡述和詳述的間隔標識
/*!  @brief Brief description. * description continued. * * Detailed description starts here. */ 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 直接使用javaDoc風格,javaDoc風格自動以簡述開頭,以空行(或者小數點加空格)作為簡述與詳述的分割
/** Brief description * description continued * * Detailed description starts here. */ /** Brief description * description continued . (注意:這里有一個小數點,加上一個空格) * Detailed description starts here. */ 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

3.3.3   文件頭注釋示例

3.3.4   類定義注釋示例

/** 本類的功能:打印錯誤信息 * * 本類是一個單件 * 在程序中需要進行錯誤信息打印的地方 */ class CPrintError { …… } 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

3.3.5   類成員變量定義示例

  • 在成員變量上面加注釋的格式
/** 成員變量描述 */ int m_Var; 
  • 1
  • 2
  • 在成員變量后面加注釋的格式
int m_color; /**< 顏色變量 */ 
  • 1

3.3.6   成員函數的注釋示例

/** 下面是一個含有兩個參數的函數的注釋說明(簡述) * * 這里寫該函數的詳述信息 *  @param a 被測試的變量(param描述參數) *  @param s 指向描述測試信息的字符串 *  @return 測試結果 (return描述返回值) *  @see Test() (本函數參考其它的相關的函數,這里作一個鏈接) *  @note (note描述需要注意的問題) */ int testMe(int a,const char *s); 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

3.3.7     枚舉變量的注釋示例

/** 顏色的枚舉定義 * * 該枚舉定義了系統中需要用到的顏色\n * 可以使用該枚舉作為系統中顏色的標識 */ enum TEnum { RED, /**< 枚舉,標識紅色 */ BLUE, /**< 枚舉,標志藍色 */ YELLOW /**< 枚舉,標志黃色. */ }enumVar; 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

3.4      C++風格的注釋

3.4.1    概述

  C++的注釋風格主要使用下面這種樣式:即在注釋塊開始使用三個反斜杠‘/’其他地方其實與JavaDoc的風格類似,只是C++風格不用 “*” 罷了。

3.4.2       簡述與詳述

  C++風格的簡述與詳述方式與javaDoc類似。   一般注釋的描述由簡述開始,經過特殊分隔方式后,后面緊跟詳述的內容,C++風格可以使用的分隔方法有以下兩種: * 使用 \brief 參數標識,空行作為簡述和詳述的間隔標識

/// \brief Brief description. /// description continued. /// /// Detailed description starts here. /// 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 使用以空行作為簡述與詳述的分割
/// Brief description /// description continued. /// /// Detailed description starts here. 
  • 1
  • 2
  • 3
  • 4
  • 以小數點加空格作為分隔如下:
/// Brief description /// description continued . (注意:這里有一個小數點,加上一個空格) /// Detailed description starts here. /// 
  • 1
  • 2
  • 3
  • 4

3.4.3    注釋風格約定

  • 一個代碼塊(類、函數、結構等)的概述采用單行的”///”加一個空格開頭的注釋,並寫在該代碼塊聲明的前面;
  • 一個代碼塊的詳述采用至少兩行的”///”加一個空格開頭的注釋,若不足兩行第二行的開頭也要寫出來,並且放在代碼塊定義的前面;如果某代碼沒有聲明只有定義或者相反,則在定義或者聲明前面寫上單行的概述+一個空行+多行的詳述;
  • 枚舉值列表的各項、結構域的各項等采用在本行最后添加”///<”加一個空格開頭的注釋;
  • 對變量的定義采用在變量上面加單行”///”加一個空格開頭的注釋(相當於是給改變量一個概述);
  • 函數的參數用”/// @param”+一個空格開頭的行描述在函數的詳述里面;
  • 函數的返回值用”/// @return”+一個空格開頭的行描述在函數的詳述里面;
  • 函數之間的參考用”/// @see”+一個空格開頭的行描述在函數的詳述里面;
  • 文件頭的版權以及文件描述的注釋參見例代碼。

3.4.4       文件頭注釋示例

這里寫圖片描述

3.4.5       類定義注釋示例

/// 本類的功能:打印錯誤信息 /// /// 本類是一個單件 /// 在程序中需要進行錯誤信息打印的地方 class CPrintError { …… } 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

3.4.6       類成員變量定義示例

*在成員變量上面加注釋的格式

/// 成員變量描述 int m_Var; 
  • 1
  • 2

*在成員變量后面加注釋的格式

int m_color; /// 顏色變量 
  • 1

3.4.7       成員函數的注釋示例

/// 下面是一個含有兩個參數的函數的注釋說明(簡述) /// /// 這里寫該函數的詳述信息 /// @param a 被測試的變量(param描述參數) /// @param s 指向描述測試信息的字符串 /// @return 測試結果 (return描述返回值) /// @see Test() (本函數參考其它的相關的函數,這里作一個鏈接) /// @note (note描述需要注意的問題) int testMe(int a,const char *s); 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

3.4.8       枚舉變量的注釋示例

/// 顏色的枚舉定義 /// /// 該枚舉定義了系統中需要用到的顏色\n /// 可以使用該枚舉作為系統中顏色的標識 enum TEnum { RED, ///< 枚舉,標識紅色 BLUE, ///< 枚舉,標志藍色 YELLOW ///< 枚舉,標志黃色. }enumVar; 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

3.5     需要注意的問題

  • Doxygen會忽略你在注釋中加入的多余的換行,如果你希望保留兩行注釋之間的空行,那么,在該行加入 \n

4   常見問題

4.1 中文問題:中文注釋在文檔中是亂碼

  解決:在expert中的INPUT選項頁的INPUT_ENCODEING中填入“GB2312”,這樣基於GB的文本編輯器生成的代碼就可以正常使用了。

4.2    圖形問題:無法繪制類圖協作圖等圖形。

  解決:首先確保安裝了graphviz for win,注意不是wingraphviz,后者是一個graphviz的com封裝,但是doxygen並不是基於它開發的,所以裝了也沒用。然后在expert的DOT_PATH中填入graphviz的安裝路徑。接着在wizard的diagram中選擇需要生成的圖形類別就可以了。 如果出現無法包含.map文件的錯誤,可以將工作目錄設置成html,並將html中所有文件都清除再試。這個問題的原因還不太確定。

4.3    輸出chm的問題:如何輸出.chm文件

  配置時注意expert中的HTML頁:選中“GENERATE_HTMLHELP”,然后在CHM_FILE中填上想要的chm文件名。   HHC_LOCATION中輸入hhc.exe文件的路徑。hhc.exe可以通過安裝HTML Help Workshop獲得。   或者使用HTML Help Workshop來編譯Doxygen生成的html文件夾中的.hhp文件,編譯完成后即可在該html文件夾中找到對應的chm文件

4.4     Doxygen無法為DLL中定義的類 導出文檔

例如:
class __declspec(dllexport) CClassName:public CObject { } 目前發現Doxygen無法識別出DLL中定義的類。
  • 1
  • 2
  • 3
  • 4
  • 5

  版權聲明本文章轉載自Jhuster《Doxygen詳細介紹》未經作者允許,嚴禁用於商業出版,否則追究法律責任。網絡轉載請注明出處,這是對原創者的起碼的尊重!!!


免責聲明!

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



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