【原创】利用doxygen来管理项目文档或注释,doxygen项目


一、doxygen应用场景:

doxygen可以用来管理目前主流的编程语言的注释而形成文档系统。(包括C, C++, C#, Objective-C, IDL, Java, VHDL, PHP, Python, Tcl, Fortran等)。doxygen官网地址(http://www.doxygen.nl/)近来大部分时间花在api接口的维护上面,其中比较重要的一个环节就是你写的接口如何让调用者一目了然的理解用法。不管是内部无线服务端与客户端之间的配合,还是对外开放的API接口,都一样。花了几天时间尝试了下使用doxygen结合svn hook来管理接口文档还是很方便实用的。doxygen官网自己本身其实就是利用doxygen来做的,如果大家想要看更具体的效果,就可以直接参考http://www.doxygen.nl/。

以下先贴出我自己做出来的部分效果图,UI很挫,大家真正使用时可以让公司UI部门美化下,由于我目前还主要是内网使用,因此没有去过多考虑UI体验:

【后端开发】【原创】利用doxygen来管理项目文档或注释,doxygen项目_PHP教程

【后端开发】【原创】利用doxygen来管理项目文档或注释,doxygen项目_PHP教程

二、安装:

doxygen目前已经比较全面的支持了windows、mac ox、linux等主流系统。而且基本上使用于目前所有的主流编程语言。这里简要介绍下自己在ubuntu系统下面的源码编译安装过程。其余安装方法可以参考官网。

三、使用doxygen之配置文件的配置:

doxygen的使用可以说就是对配置文件的配置,就是说,你只要稍微配置一下配置文件,再执行一下命令: xxxx/doxygen xxxx.conf 就可以生成你想要的文档(这里doxygen提供了多种格式的文档,我主要用的是html的,这样我们可以自己配置一个web服务到这个html上面,就可以再web上面使用文档了。),doxygen提供了200多个配置项,通过配置文件就已经可以完成丰富的功能了,下面举一些常用的配置说明:

  • 利用命令xxx/doxygen -g 就会在当前目录下面产生一个默认配置文件 doxygen.conf。打开默认配置文件,你会发现里面每一个配置项都是 配置名 配置值 这样的key-value格式,如果你有一定的英文功底的话,配置基本上就不是什么问题了。
  • 配置的详细说明请参考:http://www.stack.nl/~dimitri/doxygen/manual/config.html
  • ABBREVIATE_BRIEF //简短摘要
  • ALIASES //别名
  • ALLEXTERNALS //所有外部文档
  • ALPHABETICAL_INDEX //字母顺序索引
  • ALWAYS_DETAILED_SEC //详细描述部分
  • BINARY_TOC //二进制操作
  • BRIEF_MEMBER_DESC //简短的成员描述
  • CALL_GRAPH //调用到的图
  • CASE_SENSE_NAMES //检测的范例的名字
  • CHM_FILE //CHM格式文件
  • CLASS_DIAGRAMS //类-表
  • CLASS_GRAPH //类-图
  • DOT_PATH //DOT路径设置
  • DOT_TRANSPARENT //DOT转换设置
  • DOTFILE_DIRS //DOTFILE 列表显示
  • ENABLE_PREPROCESSING //允许"预处理"指令
  • ENUM_VALUES_PER_LINE //每行的枚举值
  • ENABLED_SECTIONS //允许分段显示
  • EXAMPLE_PATH //例子路径
  • EXAMPLE_PATTERNS //例子用的文件格式(*.cpp, *.h , *.java等)
  • EXAMPLE_RECURSIVE //例子递归
  • COLLABORATION_GRAPH //相互调用关系图
  • COLS_IN_ALPHA_INDEX //以列形式显示的字母顺序的索引
  • COMPACT_LATEX //压缩的LATEX文档
  • COMPACT_RTF //压缩的RTF文档
  • CREATE_SUBDIRS //创建一个"子目录"
  • DETAILS_AT_TOP //文档的详细头部
  • DIRECTORY_GRAPH //目录图
  • DISABLE_INDEX //禁用INDEX
  • DISTRIBUTE_GROUP_DOC //禁用文档成组显示
  • DOT_IMAGE_FORMAT //点阵图形
  • DOT_MULTI_TARGETS //多个DOT目标
  • EXCLUDE //可执行文件
  • EXCLUDE_PATTERNS //可执行文件格式(*.exe, *.dll等)
  • EXCLUDE_SYMLINKS //可执行的SYMLINKS
  • EXPAND_AS_DEFINED //规定的扩展
  • EXPAND_ONLY_PREDEF //预定义扩展
  • EXTERNAL_GROUPS //使用到的外部的文件
  • EXTRA_PACKAGES //使用到的外部插件包
  • EXTRACT_ALL //提取所有
  • EXTRACT_LOCAL_CLASSES //提取所有本地类
  • EXTRACT_LOCAL_METHODS //提取所有本地方法
  • EXTRACT_PRIVATE //提取所有private
  • EXTRACT_STATIC //提取所有static
  • FILE_PATTERNS //文件路径
  • FILE_VERSION_FILTER //文件版本控制
  • FILTER_PATTERNS //控制格式(主版本:第1次版本:第2次版本号)
  • FILTER_SOURCE_FILES //原文件的版本控制
  • FULL_PATH_NAMES //全路径名
  • GENERATE_AUTOGEN_DEF //生成自动定义文件形式
  • GENERATE_BUGLIST //生成BUG列表
  • GENERATE_CHI //生成"希腊字母"
  • GENERATE_DEPRECIATEDLIST //生成"评估"列表
  • GENERATE_HTML //生成HTML
  • GENERATE_HTMLHELP //生成HTMLHELP
  • GENERATE_LATEX //生成LATEX
  • GENERATE_LEGEND //生成图例
  • GENERATE_MAN //生成MAN文件
  • GENERATE_PERLMOD //生成Perl脚本
  • GENERATE_RTF //生成RTF
  • GENERATE_TAGFILE //生成标志文件
  • GENERATE_TESTLIST //生成TESTLIST
  • GENERATE_TODOLIST //生成TODOLIST
  • GENERATE_TREEVIEW //生成树状视图显示
  • GENERATE_XML //生成XML
  • GRAPHICAL_HIERARCHY //继承图表
  • GROUP_GRAPHS //组-图
  • HAVE_DOT //隐藏DOT
  • HHC_LOCATION //隐藏位置
  • HIDE_FRIEND_COMPOUNDS //隐藏"复合的"友员类型
  • HIDE_IN_BODY_DOCS //隐藏文档的主体
  • HIDE_SCOPE_NAMES //隐藏"作用域"名
  • HIDE_UNDOC_CLASSES //隐藏"未归档"的所有CLASS
  • HIDE_UNDOC_MEMBERS //隐藏"未归档"的所有的成员
  • HIDE_UNDOC_RELATIONS //隐藏"未归档"的关系
  • HTML_ALIGN_MEMBERS //HTML文档中成员对齐方式
  • HTML_FOOTER //HTML脚注设置
  • HTML_HEADER //HTML头部设置
  • HTML_OUTPUT //HTML输出设置
  • HTML_STYLESHEET //HTML样式设置
  • IGNORE_PREFIX //忽略哪些前缀
  • IMAGE_PATH //图片的路径设置
  • INCLUDE_GRAPH //包含-图
  • INCLUDE_PATH //头文件包含的路径
  • INHERIT_DOCS //文档的继承关系
  • INLINE_INFO //内联信
  • INLINE_INHERITED_MEMB //通过"继承"得到的内联成员
  • INLINE_SOURCES //内联部分的源代码
  • INPUT //输入设置
  • INPUT_FILTER //能够接受的输入文件的扩展名格式设置(重要)
  • INTERNAL_DOCS //内部文档
  • JAVADOC_AUTOBRIEF //JAVADOC工具生成的文档的"自动摘要"
  • LATEX_BATCHMODE //LATEX匹配方式
  • LATEX_CMD_NAME //LATEX 命令名
  • LATEX_HEADER //LATEX 头部
  • LATEX_HIDE_INDICES //LATEX内部隐藏的包含
  • LATEX_OUTPUT //LATEX输出
  • MACRO_EXPANSION //宏展开设置(重要)
  • MAKEINDEX_CMD_NAME //MAKEINDEX命令索引
  • MAN_EXTENSION //MAN扩展
  • MAN_LINKS //MAN 链接设置
  • MAN_OUTPUT //MAN输出设置
  • MAX_DOT_GRAPH_DEPTH //DOT图的最大深度
  • MAX_DOT_GRAPH_HEIGHT //DOT图的最大高度
  • MAX_DOT_GRAPH_WIDTH //DOT图的最大宽度
  • MAX_INITIALIZER_LINES //最大初始化行
  • MULTILINE_CPP_IS_BRIEF //多 个CPP文件的简短描述
  • MULTILINE_CPP_IS_BRIEF //多 个CPP文件的简短描述
  • OPTIMIZE_OUTPUT_FOR_C //对C采用的优化设置
  • OPTIMIZE_OUTPUT_JAVA //对JAVA采用的优化设置
  • OUTPUT_DIRECTORY //输出路径设置(重要)
  • OUTPUT_LANGUAGE //输出语言设置(重要)
  • PAPER_TYPE //纸张类型
  • PDF_HYPERLINKS //PDF格式超链接设置(重要)
  • PERL_PATH //perl路径设置
  • PERLMOD_LATEX //perlmod LATEX
  • PERLMOD_PRETTY // perlmod PRETTY(漂亮/相当)
  • PERLMOD_MAKEVAR_PREFIX //perlmod MAKE文件版本 PREFIX
  • PREDEFINED //预先定义(重要)
  • PROJECT_NAME //工程名(重要)
  • PROJECT_NUMBER //工程的组成成员(重要)
  • QUIET //静态量设置(重要)
  • RECURSIVE //递归和循环
  • REFERENCED_BY_RELATION //交叉参考(重要)
  • REFERENCES_RELATION //交叉参考的关系
  • REPEAT_BRIEF //重新设置"简短说明"为打开状态
  • RTF_EXTENSIONS_FILE //RTF展开文件
  • RTF_HYPERLINKS //RTF超链接
  • RTF_OUTPUT //RTF输出设置
  • RTF_STYLESHEET_FILE //RTF样式文件
  • SEARCH_INCLUDES //搜索时需要包含什么(重要)
  • SEARCHENGINE //搜索引擎设定(重要)
  • SHORT_NAMES //使短文件名生效
  • SHOW_DIRECTORIES //显示目录
  • SHOW_INCLUDE_FILES //显示包含文件(一般NO,否则太大)
  • SHOW_USED_FILES //显示被用到的文件(一般YES)
  • SKIP_FUNCTION_MACROS //跳过函数中的宏(重要),菜鸟最好别跳
  • SORT_BRIEF_DOCS //文档的简短摘要
  • SORT_MEMBER_DOCS //成员的简短描述
  • SOURCE_BROWSER //原文件浏览路径
  • STRIP_CODE_COMMENTS //排除哪些条码形式注释(重要)
  • STRIP_FROM_INC_PATH //排除哪些头文件包含的注释(重要)
  • STRIP_FROM_PATH //排除哪些条码路径设置
  • SUBGROUPING //子组设置(重要)
  • TAB_SIZE //TAB符SIZE设置(重要)
  • TAGFILES //标志文件
  • TEMPLATE_RELATIONS //模板关系设置(重要)
  • TOC_EXPAND //TOC扩展
  • TREEVIEW_WIDTH //树状图显示的宽度设置(重要)
  • UML_LOOK //UML外观设置(重要)
  • USE_WINDOWS_ENCODING //使用windows系统的编码形式(重要)
  • VERBATIM_HEADERS //VERBATIM头部(头文件)
  • WARN_FORMAT //警告格式指定(重要)
  • WARN_IF_DOC_ERROR //如果文档出错则显示警告
  • WARN_IF_UNDOCUMENTED //如果是未归档文件则显示警告
  • WARN_LOGFILE //警告日志文件设置
  • WARN_NO_PARAMDOC //无参数文档警告形式设定
  • WARNINGS //警告设置(重要)
  • XML_DTD //XML文件类型定义(重要)
  • XML_OUTPUT //XML输出设置(重要)
  • XML_PROGRAMLISTING //XML程序列表(重要)
  • XML_SCHEMA //XML模式设置(重要)

四、doxygen配置完成后注释的书写

当你配置好doxygen后,今后你基本上的时间都是花在你代码当中的注释的书写和维护。想要利用doxygen来管理文档。那么代码的注释就不需严格要求。

/**
 * @brief 这里用brief来说明接口方法的主要功能
 * @date   接口方法的创建时间
 * @author 接口方法的创建人
 * @param  : 参数说明如下表:
 * name     | type     |description of param 
 * ----------|-----------|--------------------
 * car_id   | int      |车源编号
 * province | int      |业务员所在省份
 * x        |  x       |   x
 * x        |  x       |   x
 * x        |  x       |   x
 * @return    返回值说明如下:
 * name     | type     | description of value
 * -------- |----------|----------------------
 * car_id   | int      | 车源编号
 * car_info | object   | json对象格式的车源信息
 * @warning   该接口需要告知给调用者看的一些警告
 * @attention 该接口需要告知给调用者看的一些注意事项
 * @note      该接口的一些备注说明。通常用于当后者对该接口有较大改动的时候。备注一下某个时间点某人改动了什么东西
 * @ todo     该接口的一些未完成的待办内容
 */
public function newSale() {
    do someting;
 }
  • 按照规范书写注释后,在页面文档中展示的效果如下:

【后端开发】【原创】利用doxygen来管理项目文档或注释,doxygen项目_PHP教程

  • 在项目内部可以提前约定好书写规则,余下的只要大家按照这个规则来维护即可。当然人毕竟是人,不可能保证所有的代码都能按照预期的注释规则书写。因此doxygen的配置文件里面可以指定日志文件的路径。你可以好好利用这个日子文件,用相应的脚本语言写一小段代码来分析这个日志文件,然后人性化点展示到web页面上面。指定的管理人员定期的去查看下注释错误日志,即可即时纠正不对的注释内容。

五、doxygen的比较常用的特性

doxygen的功能还远远不止我上面介绍的那些,还有很多丰富多彩的功能,有想要使用这东西的人,可以自己去doxygen官网上面学习下哈。本文可随意转载,但是请务必注明原文出处。

【后端开发】【原创】利用doxygen来管理项目文档或注释,doxygen项目_PHP教程