doxygen 常见问题一览表(中文乱码等)
下載doxygen的binary 包
為了使doxygen能夠?qū)㈩悎D、協(xié)作圖等加入到文檔中,還要下載安裝graphviz for win。
graphviz 2.18下載:
http://www.graphviz.org/pub/graphviz/ARCHIVE/graphviz-2.18.exe
全部安裝后就可以開始使用了。
運(yùn)行doxygen wizard.exe
如果你像我一樣希望只通過(guò)圖形界面運(yùn)行doxygen的話,請(qǐng)?jiān)赿oxygen的bin目錄中運(yùn)行doxywizard.exe,這時(shí)按照doxygen根目錄下的文檔(doxygen_manual-1.5.2.chm)中 Doxywizardusage一節(jié)的說(shuō)明設(shè)置即可。主要包括,源碼路徑、工作路徑、輸出路徑等。
點(diǎn)開始,即可生成文檔
最后對(duì)文檔生成過(guò)程中遇到的一些問(wèn)題進(jìn)行說(shuō)明:
1、 中文問(wèn)題:中文注釋在文檔中是亂碼。
解決:在expert中的INPUT選項(xiàng)頁(yè)的INPUT_ENCODEING中填入“GB2312”,這樣基于GB的文本編輯器生成的代碼就可以正常使用了。
但是,還有一個(gè)無(wú)法徹底解決的問(wèn)題就是,當(dāng)輸出語(yǔ)言為中文時(shí)左邊的導(dǎo)航欄的所有中文仍然是亂碼。哪位有解決方案,請(qǐng)務(wù)必告知!
2 圖形問(wèn)題:無(wú)法繪制類圖協(xié)作圖等圖形。
首先確保安裝了graphviz forwin,注意不是wingraphviz,后者是一個(gè)graphviz的com封裝,但是doxygen并不是基于它開發(fā)的,所以裝了也沒(méi)用。然后在expert的DOT_PATH中填入graphviz的安裝路徑。接著在wizard的diagram中選擇需要生成的圖形類別就可以了。
如果出現(xiàn)無(wú)法包含.map文件的錯(cuò)誤,可以將工作目錄設(shè)置成html,并將html中所有文件都清除再試。這個(gè)問(wèn)題的原因還不太確定。
3輸出chm的問(wèn)題:如何輸出.chm文件
1. 你必須安裝微軟或其相兼容的chm編譯系統(tǒng)。通常為HTML Help Workshop。
2. 首先在[Wizard...]的Output頁(yè)面中,選擇HTML,然后選擇到prepare for compressed HTML(.chm)。
3. 其次在[Expert...]的HTML頁(yè)面中,將HHC_LOCATION指向微軟的hhc工具。通常為C:/Program Files/HTML Help Workshop/hhc.exe。然后點(diǎn)擊OK,保存,編譯即可。
HHC_LOCATION中輸入hhc.exe文件的路徑。hhc.exe可以通過(guò)安裝HTML Help Workshop獲得。
HTML Help Workshop 地址:
http://www.microsoft.com/downloads/details.aspx?FamilyID=00535334-c8a6-452f-9aa0-d597d16580cc&displaylang=en
4 如何像MSDN那樣在左邊的樹中顯示函數(shù)列表?
打開[Expert...]的HTML頁(yè)面,然后選中TOC_EXPAND即可。
5 如何去掉CHM附帶的CHI文件?
注意在默認(rèn)情況下,CHM會(huì)有一個(gè)CHI文件,似乎是用來(lái)加速索引的。我本人也遇到過(guò)很多用戶僅僅上傳了CHM,而沒(méi)有上傳CHI文件,導(dǎo)致無(wú)法正常顯示的情況。我不知道是否可以通過(guò)工具重建CHI文件,但是我覺(jué)得關(guān)閉這個(gè)功能即可。打開[Expert...]的HTML頁(yè)面,取消GENERATE_CHI即可。
6 如何像MSDN那樣右邊每頁(yè)顯示一個(gè)函數(shù)?
這個(gè)問(wèn)題其實(shí)比較棘手,在[Expert...]中的Project頁(yè)面,下面有一個(gè)選項(xiàng)叫做SEPARATE_MEMBER_PAGES,把這個(gè)選項(xiàng)選中,這樣每個(gè)函數(shù)就是一個(gè)頁(yè)。但是會(huì)有一個(gè)問(wèn)題,那就是右邊頁(yè)面的旁邊多了所有函數(shù)的列表。很遺憾,經(jīng)過(guò)研究,這個(gè)確實(shí)無(wú)法去掉。我的解決方法就是自己編譯一下doxygen,在memberlist.cpp的writeDocumentationPage函數(shù)中將container->writeQuickMemberLinks(ol,md);連同附近幾行屏蔽掉即可。
7 如何在CHM中去掉當(dāng)選擇SUBGROUPING后去掉分組的組信息?
這個(gè)功能就是在chm的左邊樹中直接列出函數(shù)列表,而不用點(diǎn)擊看右邊頁(yè)面了。這個(gè)功能需要修改源代碼。在index.cpp中,屏蔽writeGroupIndexItem函數(shù)的Doxygen::indexList.addContentsItem,Doxygen::indexList.incContentsDepth和Doxygen::indexList.decContentsDepth();即可,具體不解釋了,一看便知。
8 如何修改或者去掉右下腳Generated at ...的文字?
打開[Expert...]的HTML頁(yè)面,然后在HTML_FOOTER中指定相應(yīng)的HTML文件即可。注意HTML_FOOTER中至少包含BODY和HTML結(jié)束標(biāo)記。即一個(gè)最小的尾部HTML至少是這樣</BODY></HTML>。同理,如果你要指定了HTML_HEADER,他至少包含<HTML><HEAD></HEAD><BODY>
9 如何生成組?
組就是可以把同類的函數(shù)放到一個(gè)根下的顯示方式。doxygen支持grouping,即你可以把相關(guān)的代碼通過(guò)標(biāo)志,放到同一個(gè)組中,便于查看。這主要是通過(guò)幾個(gè)內(nèi)置語(yǔ)法命令。首先通過(guò)@defgroup定義一個(gè)組,然后要把分組的函數(shù)或者類等,通過(guò)標(biāo)志@ingroup加入相應(yīng)的組。這樣,相應(yīng)的函數(shù)就被放置在同一個(gè)組中。
10 如何生成中文幫助?
點(diǎn)擊[Expert...],在頁(yè)P(yáng)roject 的OUTPUT_LANGUAGE,選擇Chinese,這樣輸出的幫助提示信息就是中文。具體中文提示信息的文字在源代碼中。
11 如何徹底解決DoxyGen的輸出中文chm的亂碼問(wèn)題?
DoxyGen的實(shí)現(xiàn)中大概有三處編碼的設(shè)置。首先是,doxyfile,也就是配置文件。其次,INPUT_ENCODING,也就是DoxyGen需要解析的輸入文件的編碼。最后,就是輸出的編碼。譬如CHM左邊的索引編碼。
首先是chm的標(biāo)題亂碼,這個(gè)比較好解決,因?yàn)镈oxyWizard使用QT做的界面,它內(nèi)部做了轉(zhuǎn)換,所以在DoxyWizard中輸入中文,在保存的時(shí)候,他自己做了轉(zhuǎn)碼,導(dǎo)致doxyfile中的最終的保存信息不正確。這個(gè)時(shí)候只需要用記事本打開doxyfile配置文件,輸入相應(yīng)中文即可。注意保存的時(shí)候保存成ANSI編碼即可。保存成其他格式的話可能需要去掉BOM,比較麻煩,沒(méi)研究了。這個(gè)相應(yīng)的編碼設(shè)置在[Expert...]中,頁(yè)P(yáng)roject 的 DOXYFILE_ENCODING,不輸入或者默認(rèn)為UTF-8都行。
其次是右邊內(nèi)容亂碼,這個(gè)多半是因?yàn)槟銢](méi)有配置好輸入的文件編碼類型造成的。在[Expert...]的Input頁(yè)面中,有一個(gè)INPUT_ENCODING,這個(gè)選項(xiàng)表示輸入文件的編碼方式,這要和你處理的源文件格式一致。對(duì)于我們來(lái)說(shuō)(使用vs的人),一般設(shè)置為GB2312。當(dāng)然,再次聲明,編碼方式取決于源文件的編碼方式。如果文件編碼已經(jīng)是UTF-8了,然而你還將其設(shè)置成GB2312,那么DoxyGen會(huì)將UTF-8當(dāng)成ANSI再進(jìn)行一次UTF-8轉(zhuǎn)換,自然會(huì)出錯(cuò)了。
最后也是經(jīng)常遇到的問(wèn)題就是DoxyGen生成的CHM文件的左邊樹目錄的中文變成了亂碼。這個(gè)只需要將chm索引的編碼類型修改為GB2312即可。在HTML的CHM_INDEX_ENCODING中輸入GB2312即可。然而這種方法下,還有一個(gè)瑕疵之處,就是chm的搜索頁(yè)的搜索結(jié)果中顯示的中文文字卻變成亂碼了。這是因?yàn)镈oxyGen默認(rèn)開啟了HTML Help Workshop的Full-textsearch全文搜索選項(xiàng),他在進(jìn)行全文搜索的時(shí)候,應(yīng)該是打開文件然后按照ANSI進(jìn)行搜索的,(資料表示HHW不支持UTF-8,僅支持ISO-8859-1或者windows-1252編碼。)而Doxygen生成的右邊界面統(tǒng)一是UTF-8,這自然出現(xiàn)了問(wèn)題。而在這種情況下做全文搜索,理論上只能搜索英文。
無(wú)奈,我們的解決方案只能是重新編譯DoxyGen代碼,為了滿足搜索,只要保證右邊的頁(yè)面文件不是UTF-8即可。我們首先修改writeDefaultHeaderFile這個(gè)函數(shù)的代碼,將其charset=GB2312。然后在TranslatorDecoder的構(gòu)造函數(shù)中修改m_toUtf8 =(void*)-1;即屏蔽文本寫入時(shí)最終的轉(zhuǎn)換函數(shù)。最后刪除INPUT_ENCODING的設(shè)置或者輸入U(xiǎn)TF-8。這樣會(huì)使DoxyGen認(rèn)為我們的文本是UTF-8的,從而不用進(jìn)行轉(zhuǎn)換。生成替換原始的DoxyGen即可。
另外需要補(bǔ)充的是,還有一種方案是不用修改作者的源代碼,但是需要將DoxyGen生成的右邊的HTML文件使用工具(如iconv)手工轉(zhuǎn)換成GB2312,然后再使用HTML Help Workshop生成,網(wǎng)上有篇文章介紹過(guò),我測(cè)試一下,也是沒(méi)有問(wèn)題的。
最后,doxygen是一個(gè)開源項(xiàng)目,并且支持vs2005項(xiàng)目,這樣一來(lái),如果你覺(jué)得哪里不順手,完全可以把代碼下載后自行編譯。雖然我感覺(jué)doxygen的代碼寫的不能算是perfect,但是對(duì)于一個(gè)這樣的工程,我們無(wú)論如何都需要一種敬意。祝好運(yùn)~
這樣,基本上就能夠用doxygen生成漂亮的文檔了。代碼方面,doxygen支持多種格式的注釋風(fēng)格,根據(jù)manual選擇自己喜歡的就好。
總結(jié)
以上是生活随笔為你收集整理的doxygen 常见问题一览表(中文乱码等)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 会考成绩到底有什么用
- 下一篇: 美女网名之气质110个