1 doxygen是大名鼎鼎代碼文檔工具。
2 Graphviz
這個工具配合doxygen使用,可以提取函數,子產品之間的調用關,非常清晰。
下面是Graphviz提取出來的一些關系圖:

3 htmlhelp
這個工具把doxygen生成的html檔案,轉化為一個CHM檔案,看起來友善些。
下載下傳位址:
<a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=00535334-c8a6-452f-9aa0-d597d16580cc&displaylang=en">http://www.microsoft.com/downloads/details.aspx?FamilyID=00535334-c8a6-452f-9aa0-d597d16580cc&displaylang=en</a>
安裝它。
全部安裝後就可以開始使用了。
運作doxygen wizard.exe
運作doxywizard.exe,這時按照doxygen根目錄下的文檔(doxygen_manual-1.5.2.chm)中 Doxywizard usage一節的說明設定即可。主要包括,源碼路徑、工作路徑、輸出路徑等。
點開始,即可生成文檔
最後對文檔生成過程中遇到的一些問題進行說明:
1 中文問題:中文注釋在文檔中是亂碼。
解決:在expert中的INPUT選項頁的INPUT_ENCODEING中填入“GB2312”,這樣基于GB的文本編輯器生成的代碼就可以正常使用了。
2 圖形問題:無法繪制類圖協作圖等圖形。
首先確定安裝了graphviz,注意不是wingraphviz,後者是一個graphviz的com封裝,但是doxygen并不是基于它開發的,是以裝了也沒用。然後在 expert的Dot頁DOT_PATH中填入graphviz的安裝路徑。接着在wizard的diagram中選擇需要生成的圖形類别就可以了。
如果出現無法包含.map檔案的錯誤,可以将工作目錄設定成html,并将html中所有檔案都清除再試。這個問題的原因還不太确定。
3 輸出chm的問題:如何輸出.chm檔案
1. 你必須安裝微軟或其相相容的chm編譯系統。通常為HTML Help Workshop。
2. 首先在[Wizard]的Output頁面中,選擇HTML,然後選擇到prepare for compressed HTML(.chm)。
3. 其次在[Expert]的HTML頁面中,将HHC_LOCATION指向微軟的hhc工具。通常為C:/Program Files/HTML Help Workshop/hhc.exe。然後點選OK,儲存,編譯即可。
HHC_LOCATION中輸入hhc.exe檔案的路徑。hhc.exe可以通過安裝HTML Help Workshop獲得。
4 如何像MSDN那樣在左邊的樹中顯示函數清單?
打開[Expert]的HTML頁面,然後選中TOC_EXPAND即可。
5 如何去掉CHM附帶的CHI檔案?
注 意在預設情況下,CHM會有一個CHI檔案,似乎是用來加速索引的。我本人也遇到過很多使用者僅僅上傳了CHM,而沒有上傳CHI檔案,導緻無法正常顯示的 情況。我不知道是否可以通過工具重建CHI檔案,但是我覺得關閉這個功能即可。打開[Expert]的HTML頁面,取消GENERATE_CHI 即可。
6 如何像MSDN那樣右邊每頁顯示一個函數?
這 個問題其實比較棘手,在[Expert]中的 Project頁面,下面有一個選項叫做SEPARATE_MEMBER_PAGES,把這個選項選中,這樣每個函數就是一個頁。但是會有一個問題,那就 是右邊頁面的旁邊多了所有函數的清單。很遺憾,經過研究,這個确實無法去掉。我的解決方法就是自己編譯一下doxygen,在 memberlist.cpp的writeDocumentationPage函數中将 container->writeQuickMemberLinks(ol,md);連同附近幾行屏蔽掉即可。
7 如何在CHM中去掉當選擇SUBGROUPING後去掉分組的組資訊?
這 個功能就是在chm的左邊樹中直接列出函數清單,而不用點選看右邊頁面了。這個功能需要修改源代碼。在index.cpp中,屏蔽 writeGroupIndexItem函數的 Doxygen::indexList.addContentsItem,Doxygen::indexList.incContentsDepth和 Doxygen::indexList.decContentsDepth();即可。
8 如何修改或者去掉右下腳Generated at ...的文字?
打 開[Expert...]的HTML頁面,然後在HTML_FOOTER中指定相應的HTML檔案即可。注意HTML_FOOTER中至少包含BODY和 HTML結束标記。即一個最小的尾部HTML至少是這樣</BODY></HTML>。同理,如果你要指定了 HTML_HEADER,他至少包含<HTML><HEAD></HEAD><BODY>
9 如何生成組?
組 就是可以把同類的函數放到一個根下的顯示方式。doxygen支援grouping,即你可以把相關的代碼通過标志,放到同一個組中,便于檢視。這主要是 通過幾個内置文法指令。首先通過@defgroup定義一個組,然後要把分組的函數或者類等,通過标志@ingroup加入相應的組。這樣,相應的函數就 被放置在同一個組中。
10 如何生成中文幫助?
點選[Expert],在頁Project 的OUTPUT_LANGUAGE,選擇Chinese,這樣輸出的幫助提示資訊就是中文。具體中文提示資訊的文字在源代碼中。
11 如何徹底解決DoxyGen的輸出中文chm的亂碼問題?
DoxyGen的實作中大概有三處編碼的設定。首先是,doxyfile,也就是配置檔案。其次,INPUT_ENCODING,也就是DoxyGen需要解析的輸入檔案的編碼。最後,就是輸出的編碼。譬如CHM左邊的索引編碼。
首先是chm的标題亂碼,這個比較好解決,因為DoxyWizard使用QT做的界面,它内部做了轉換,是以在DoxyWizard中輸入中文,在儲存的時 候,他自己做了轉碼,導緻doxyfile中的最終的儲存資訊不正确。這個時候隻需要用記事本打開doxyfile配置檔案,輸入相應中文即可。注意儲存 的時候儲存成ANSI編碼即可。儲存成其他格式的話可能需要去掉BOM,比較麻煩,沒研究了。這個相應的編碼設定在[Expert...]中,頁 Project 的 DOXYFILE_ENCODING,不輸入或者預設為UTF-8都行。
其次是右邊内容亂碼,這個多半是因為你沒有配置好輸入的檔案編碼類型造成的。在[Expert...]的Input頁面中,有一個 INPUT_ENCODING,這個選項表示輸入檔案的編碼方式,這要和你處理的源檔案格式一緻。對于我們來說(使用vs的人),一般設定為 GB2312。當然,再次聲明,編碼方式取決于源檔案的編碼方式。如果檔案編碼已經是UTF-8了,然而你還将其設定成GB2312,那麼DoxyGen 會将UTF-8當成ANSI再進行一次UTF-8轉換,自然會出錯了。
最後也是經常遇到的問題就是DoxyGen生成的CHM檔案的左邊樹目錄的中文變成了亂碼。這個隻需要将chm索引的編碼類型修改為GB2312即可。在 HTML的CHM_INDEX_ENCODING中輸入GB2312即可。然而這種方法下,還有一個瑕疵之處,就是chm的搜尋頁的搜尋結果中顯示的中文 文字卻變成亂碼了。這是因為DoxyGen預設開啟了HTML Help Workshop的Full-text search全文搜尋選項,他在進行全文搜尋的時候,應該是打開檔案然後按照ANSI進行搜尋的,(資料表示HHW不支援UTF-8,僅支援ISO- 8859-1或者windows-1252編碼。)而Doxygen生成的右邊界面統一是UTF-8,這自然出現了問題。而在這種情況下做全文搜尋,理論 上隻能搜尋英文。
我們的解決方案隻能是重新編譯DoxyGen代碼,為了滿足搜尋,隻要保證右邊的頁面檔案不是UTF-8即可。我們首先修改 writeDefaultHeaderFile這個函數的代碼,将其charset=GB2312。然後在 TranslatorDecoder的構造函數中修改m_toUtf8 = (void*)-1;即屏蔽文本寫入時最終的轉換函數。最後删除INPUT_ENCODING的設定或者輸入UTF-8。這樣會使DoxyGen認為我們 的文本是UTF-8的,進而不用進行轉換。生成替換原始的DoxyGen即可。
另外需要補充的是,還有一種方案是不用修改作者的源代碼,但是需要将DoxyGen生成的右邊的HTML檔案使用工具(如iconv)手工轉換成GB2312,然後再使用HTML Help Workshop生成,網上有篇文章介紹過,我測試一下,也是沒有問題的。
最後,doxygen是一個開源項目,并且支援vs2005項目,這樣一來,如果你覺得哪裡不順手,完全可以把代碼下載下傳後自行編譯。
這樣,基本上就能夠用doxygen生成漂亮的文檔了。代碼方面,doxygen支援多種格式的注釋風格,根據manual選擇自己喜歡的就好。