分类: LINUX
2010-08-16 13:44:30
按照约定的格式注释源代码,用工具处理注释过的源代码产生文档。通过这种方式产生文档至少有以下好处:
很多编程语言都有类似的文档工具,例如:Java有javadoc,Ruby有rdoc。对于C/C++程序,我们可以用Doxygen生成文档。本文通过为一个C++程序“谁养鱼”建立文档,介绍了怎样在Windows平台使用Doxygen。
Doxygen比较适合制作API的接口文档,CHM是这类文档的常见格式。最新版本的Doxygen(目前是1.5.2)统一采用UTF-8作为输出文件的编码格式,但微软的CHM编译工具不支持UTF-8,这就为制作中文CHM文档带来麻烦。本文提出了解决这个问题的方法。
使用Doxygen生成文档,主要是两件事:
然后只要执行命令:
doxygen Doxyfile
就可以了。输入文件、输出目录、参数等都是在Doxyfile中配置的。
Doxygen的输出格式主要有HTML、LATEX、RTF等:
完成本文的范例需要以下工具:
可以从我的主页下载这些工具:、、和。
前面说过:目前,Doxygen统一采用UTF-8作为输出文件的编码格式,但微软的CHM编译工具(hhc.exe)不支持UTF-8。如果直接用hhc.exe编译,中文不能正确显示。解决这个问题的思路很简单:
可以用iconv对文件作编码转换。对于html文件,除了文件内容的编码转换外,还要将
中的“UTF-8”替换成“gb2312”。
我写了一些批处理文件(.bat)用于简化处理过程,包括:
@echo off
echo 清空以前输出
if exist refman.chm del /f /q refman.chm
if exist output\html del /f /q output\html\*.*
if exist output\latex del /f /q output\latex\*.*
if exist output\rtf del /f /q output\rtf\*.*
if exist output del /f /q output\*.*
@echo off
echo 生成文档
doxygen Doxyfile
@echo off
echo 将%1从utf-8编码转换到gbk编码
for %%f in (%1) do copy %%f %%f.utf8
for %%f in (%1) do iconv -c -f utf-8 -t gbk %%f.utf8 > %%f
这个批处理文件要求系统当前路径上有iconv.exe。执行iconv时,使用-c参数忽略无法转换的字符。否则如果输入文件包含无法转换的字符,转换会失败。输入文件被备份到加过.utf8后缀的文件。
@echo off
call utf82gbk %1
echo 将%1中的charset从UTF-8改为gb2312
fr %1 -f:charset=UTF-8 -t:charset=gb2312
这个批处理文件要求系统当前路径上有iconv.exe和的fr.exe。
@echo off
echo 将Doxygen输出文件编码从utf-8转换到gbk
set path=%path%;%cd%
cd output\html
echo 处理chm输入文件
call utf82gbk.bat index.hhp
call utf82gbk.bat index.hhc
call utf82gbk.bat index.hhk
call html-utf82gbk *.html
echo 生成chm文件
"C:\Program Files\HTML Help Workshop\hhc.exe" index.hhp
if exist index.chm copy index.chm ..\..\refman.chm
del /f /q *.chm
cd ..\..
这个批处理文件假设系统在目录“C:\Program Files\HTML Help Workshop\”安装了“HTML Help Workshop”。并假设输出目录是Doxyfile所在目录的子目录output。
@echo off
call clean.bat
call build.bat
call makechm.bat
了解DOS命令的朋友应该很容易看懂这些批处理吧。将这些批处理文件放在工作目录(即Doxyfile所在目录)后,每次只要键入rebuild就可以重新生成chm文件。必要时可以单独使用clean、build、makechm命令。utf82gbk和html-utf82gbk命令也可以单独使用。读者可以从我的主页下载这些。
“谁养鱼”是我最近写的一个小程序,它用推理法求解爱因斯坦谜题——“谁养鱼”。读者可从下载未文档化的程序。
制作文档前,我们要完成以下准备工作:
好了,现在可以运行Doxywizard创建配置文件。
可以直接点“Save...”按钮,将配置保存在doc\Doxyfile。这时,Doxyfile的内容是Doxygen的默认设置。Doxyfile是普通文本文件,我们可以直接打开编辑。不过在Doxywizard的界面上填写也很方便,每个参数都有详细提示。建议用Doxywizard完成第一次设置。以后如果需要调整个别参数,可以直接编辑Doxyfile。
点“Expert...”按钮后,开始填写配置参数。
:),Doxygen是不是有很多参数?其实大多数参数都有缺省值,需要填写的不算多,下面分页介绍:
DOXYFILE_ENCODING是Doxyfile的文本编码。如果文件中有中文字符,可以填写GBK。
填写项目名(PROJECT_NAME)、项目版本(PROJECT_NUMBER)、输出目录(OUTPUT_DIRECTORY)和输出语言(OUTPUT_LANGUAGE)。输出目录可以按Doxyfile的相对目录填写。输出语言相当于程序资源,选择Chinese。
Doxywizard的中文支持不完善,中文字符会被存为乱码。我们直接编辑Doxyfile,填写:
PROJECT_NAME = 谁养鱼
取消FULL_PATH_NAMES。我们修改了以下参数:
DOXYFILE_ENCODING | GBK |
PROJECT_NAME | 谁养鱼 |
PROJECT_NUMBER | 1.0 |
OUTPUT_DIRECTORY | output |
OUTPUT_LANGUAGE | Chinese |
FULL_PATH_NAMES | NO |
在Messages页将WARN_LOGFILE填写为build.log。这样,Doxygen会将编译时出现的警告和错误保存在build.log,我们可以对照修改。
WARN_LOGFILE | build.log |
指定输入源文件目录(INPUT),将输入文件编码(INPUT_ENCODING)改为GBK。
INPUT | ..\src |
INPUT_ENCODING | GBK |
FILE_PATTERNS参数是Doxygen要处理的文件类型,缺省值包括Doxygen支持的所有文件类型。不能用Doxygen文档化任意文件类型。例如Doxygen不支持汇编程序。
选择SOURCE_BROWSER,在文档中包含源代码。
SOURCE_BROWSER | YES |
选择GENERATE_HTMLHELP后,Doxygen会准备生成chm文件需要的项目文件、目录文件和索引文件。可以通过参数HTML_HEADER和HTML_FOOTER定制页面,参数值是包含定制内容的文件名。例如,我们可以建立文件html_foot,内容为: