- 編程技能:編寫可讀可維護的代碼
- 編程技巧:編寫優(yōu)化高效的代碼
簡介
開源跨平臺的注釋文檔生成工具。
安裝
- 下載
- 解壓
tar zxvf doxygen壓縮包 - 切換到解壓后的doxygen主目錄
cd doxygen解壓目錄 - 創(chuàng)建
build目錄mkdir build - 切換到
build目錄cd build - 生成Linux Makefile
cmake -G "Unix Makefiles" ../ - 編譯
make - 安裝
make install
使用
- 進入項目目錄
cd 項目目錄 - 生成配置文件
doxygen –g(默認配置文件名為Doxyfile) - 生成文檔文件
doxygen
配置文件
# 項目名稱,將作為于所生成的程序文檔首頁標題
PROJECT_NAME = “Test”
# 文檔版本號,可對應(yīng)于項目版本號,譬如 svn、cvs 所生成的項目版本號
PROJECT_NUMBER = "1.0.0
# 程序文檔輸出目錄
OUTPUT_DIRECTORY = /home/user1/docs
# 程序文檔輸入目錄
INPUT = /home/user1/project/kernel
# 程序文檔語言環(huán)境
OUTPUT_LANGUAGE = Chinese
DOXYFILE_ENCODING = UTF-8
# 只對頭文件中的文檔化信息生成程序文檔
FILE_PATTERNS =
# 遞歸遍歷當前目錄的子目錄,尋找被文檔化的程序源文件
RECURSIVE = YES
# 如果是制作 C 程序文檔,該選項必須設(shè)為 YES,否則默認生成 C++ 文檔格式
OPTIMIZE_OUTPUT_FOR_C = YES
#提取信息,包含類的私有數(shù)據(jù)成員和靜態(tài)成員
EXTRACT_ALL = yes
EXTRACT_PRIVATE = yes
EXTRACT_STATIC = yes
# 對于使用 typedef 定義的結(jié)構(gòu)體、枚舉、聯(lián)合等數(shù)據(jù)類型,只按照 typedef 定義的類型名進行文檔化
TYPEDEF_HIDES_STRUCT = YES
# 在 C++ 程序文檔中,該值可以設(shè)置為 NO,而在 C 程序文檔中,由于 C 語言沒有所謂的域/名字空間這樣的概念,所以此處設(shè)置為 YES
HIDE_SCOPE_NAMES = YES
# 讓 doxygen 靜悄悄地為你生成文檔,只有出現(xiàn)警告或錯誤時,才在終端輸出提示信息
QUIET = YES
# 遞歸遍歷示例程序目錄的子目錄,尋找被文檔化的程序源文件
EXAMPLE_RECURSIVE = YES
# 允許程序文檔中顯示本文檔化的函數(shù)相互調(diào)用關(guān)系
REFERENCED_BY_RELATION = YES
REFERENCES_RELATION = YES
REFERENCES_LINK_SOURCE = YES
# 不生成 latex 格式的程序文檔
GENERATE_LATEX = NO
# 在程序文檔中允許以圖例形式顯示函數(shù)調(diào)用關(guān)系,前提是你已經(jīng)安裝了 graphviz 軟件包
HAVE_DOT = YES
CALL_GRAPH = YES
CALLER_GRAPH = YES
#在最后生成的文檔中,把所有的源代碼包含在其中
SOURCE BROWSER = YES
$這會在HTML文檔中,添加一個側(cè)邊欄,并以樹狀結(jié)構(gòu)顯示包、類、接口等的關(guān)系
GENERATE TREEVIEW = ALL
| No. | 文件格式 | 選項 | 值 | 默認值 | 作用 | 相關(guān)選項 |
|---|---|---|---|---|---|---|
| 1 | LaTeX | GENERATE_LATEX |
YES/NO |
YES |
產(chǎn)生LaTeX的文件 |
LATEX_OUTPUT輸出目錄,默認latex
|
| 2 | rtf | GENERATE_RTF |
YES/NO |
YES |
產(chǎn)生rtf的文件 |
RTF_OUTPUT輸出目錄,默認rtf
|
| 3 | man | GENERATE_MAN |
YES/NO |
NO |
Unix Man Page 格式 |
MAN_OUTPUT輸出目錄,默認man
|
| 2 | rtf | GENERATE_XML |
YES/NO |
NO |
產(chǎn)生xml的文件 |
XML_OUTPUT輸出目錄,默認xml
|
語法簡介
- 簡單注釋
- 單行注釋:
///或者//! - 多行注釋:
/**或者/*! - 文件注釋
/**
* @file 文件名
* @brief 簡介
* @details 細節(jié)
* @mainpage 工程概覽
* @author 作者
* @version 版本號
* @date 年-月-日
*/
- 全局常量/變量/宏定義/結(jié)構(gòu)體定義/類定義的注釋
- 代碼前注釋
/// 注釋
全局常量/變量/宏定義/結(jié)構(gòu)體定義/類定義
例如:
/// 緩存大小
#define BUFSIZ 1024*4
- 代碼后注釋
全局常量/變量/宏定義/結(jié)構(gòu)體定義/類定義 ///< 注釋
例如:
#define BUFSIZ 1024*4 ///< 緩存大小
- 函數(shù)注釋
/**
* @brief 函數(shù)簡介
*
* @param 形參 參數(shù)說明
* @param 形參 參數(shù)說明
* @return 返回值說明
*/
例如:
/**
* @brief 主函數(shù)
* @details 程序唯一入口
*
* @param argc 命令參數(shù)個數(shù)
* @param argv 命令參數(shù)指針數(shù)組
* @return @c 0 程序執(zhí)行成功
* @c 1 程序執(zhí)行失敗
*/
int main(int argc, char* argv[]){
}
| 命令 | 生成字段名 |
|---|---|
@param |
參數(shù) |
@return |
返回值 |
@p |
參數(shù)(后面緊接單詞是參數(shù)) |
@c |
代碼(后面緊接單詞是代碼) |
- 其它常用命令
| 命令 | 生成字段名 | 說明 |
|---|---|---|
@attention |
注意 | |
@bug |
缺陷 | 鏈接到所有缺陷匯總的缺陷列表 |
@warning |
警告 | |
@see |
參考 | |
@code |
代碼塊開始 | 與@endcode成對使用 |
@endcode |
代碼塊結(jié)束 | 與@code成對使用 |
@todo |
TODO | 鏈接到所有TODO 匯總的TODO 列表 |