我的日常使用之Doxygen
安装
安装就是和一般的源码安装类似,去官网下载doxygen源码,由于doxygen依赖GNU的flex和bison。所以要先安装这两个组建。 源码安装doxygen还是比较简单的,直接./configure --help直观明了,不像flex的configure --help又臭又长。所以建议 flex和bison直接./configure 然后make make install .而doxygen可以加 --prefix dir 和--enable-langs。
使用
配置文件
Doxygen 自己提供了配置文件的模板,高级的不说,这里我直接使用
doxygen -s -g
产生Doxygen配置文件,这里-s可以使生成的文件少点,其他参数可以参考Manual,有中文翻译版。使用的时候可以指定使用配置文件。 产生好配置文件后,如果代码中的注释也符合文档规范,那么直接使用
doxygen
命令就可以产生目标文件。我只生成html格式文件,在Hmtl目录下,打开index.html即可。
这里说下常用的配置选项,我常用C,所以这里比较适合C。
# 项目名称,将作为于所生成的程序文档首页标题
PROJECT_NAME = “My Program”
# 文档版本号,表示项目版本号
PROJECT_NUMBER = "1.0.0"
# 程序文档输出目录
OUTPUT_DIRECTORY = doc/
# 如果是制作 C 程序文档,该选项必须设为 YES,否则默认生成 C++ 文档格式
OPTIMIZE_OUTPUT_FOR_C = YES
# 不产生LATEX文档,默认是产生的
GENERATE_LATEX = NO
# 使用JavaDoc风格注释
JAVA
源码文档化
虽然文档话的格式有多种,这里我只写我熟悉的JavaDoc风格(我对java一点也不会)。觉得JavaDoc风格比较清爽。 其他格式可以参考Manual。
JavaDoc的注释都是放在 /** XXXX */ 和通常的C注释很类似,只是前面得用两个星号。
1)对文件的说明
/**
* @file filename_of_thisfile
* @data data
* @author me
* Brief Content .
* Detailed Content0
* Detailed Content1
*/
这里注意了,filename_of_thisfile得和该文件的文件名一样,毕竟是对该文件命名嘛,否则做了等于没有做,最终文档中不会出现其内容。 在JavaDoc中,首行的第一个句话(用英文句点符号分割),是简要说明,后面部分都被认为是详细说明。如果想在简要说明中使用句号要在 句点符号后面加上\和空格如“ wode.\ nide”我的写法就是开始时简要说明加上句点放一行,然后是新的详细说明段。上面的@data表示日期, @author字段表示作者,这个都比较的直观。
2) 对函数的注释
/**
* Brief Information Of Function .
* Detailed Discripiton
* Detailed Discripiton
* @param param0 Discripiton of param0
* @param param1 Discripiton of param1
* @param param2 Discripiton of param2
* @return Discripiton of return
*/
这里的简要说明和详细说明与上面讲述的一样,还是建议简要说明放一行,以句点结尾,后面接上详细说明。
这里介绍下新增的部分。“@param param0 Discripiton of param0”, @param表示对参数进行说明,后面空格跟上参数名,在空格跟上对该参数的说明。最终文档中,回隐藏@param。 然后将参数名进行加粗突出。 “@return Discripiton of return ” @return表示对函数的返回者进行说明。后面空格接上描述。最终文档中,回隐藏@return,将描述内容放在函数 返回值描述栏里。
上面是对函数总体的描述,如果想在函数内部对某行或者某个语句块进行描述可以使用行注释,或者直接使用和上面一样的简述+详述(去掉@param 和@return)的注释。 行注释用如下表示
/**< line */
见个示例
/**
* Get max value .
* Compare two int value and return the lager one
* @param a value to be compared
* @param b value to be compared
* @return return the lager one
*/
int max(int a,int b)
{
return a>b?a:b; /**< use "? : " operator */
}
####3) 对结构和宏进行注释
虽然Doxygen说对部分宏进行支持,也有专门用于模块和宏的结构。但是我觉得麻烦,不如直接用上面的简述+详述 或者行注释来的直接。而且有时候看这些文字的情景就是看代码的 时候,多了不熟悉的标号反而不直观。看我的例子。
/**
* Type of student .
* A strcut of student
*/
struct student{
int age; /**< age of student */
char *name; /**< name of student */
};
这里的注释其实很多余哈,呵呵。。比较直观,也正是直观,所以可以很简单的表示谁对谁进行说明。