Doxygen,大名鼎鼎的文档生成工具,被Boost、OpenCasCade等诸多项目作为文档生成的不二人选。人说,才华横溢往往是高深莫测,这句话放在 Doxygen这里显然是不适用的。十八般武艺样样精通的Doxygen,却十分的简单易用,从头到尾看一下它随机的文档,想不会用都难。。。
嫌看英文麻烦的,这里有一篇中文的入门介绍。简单的说,如果你准备在项目中采用Doxygen作为文档生成的工具,首先,你需要了解,Doxygen需要什么样的代码结构才能够生产文档。 Doxygen基本上对光秃秃的代码不感兴趣,你需要在所有的类、函数、成员函数、公共变量、名字空间等代码已有表示的结构上方添加上指定格式的注释,Doxygen才能识别出来。此外,你还可以按照指定格式的注释添加附加的信息,用以生成模块的分类,架构图之类的信息。Doxygen支持的注释格式多种多样,强烈建议制定一个统一的标准,否则会给项目中其他的人员或者后来的人员带来很多的困扰。。。
按照指定的格式书写了注释之后,就需要写一个Doxygen的配置文件,依照此配置文件,Doxygen可以生产HTML、Tex、XML等多种格式输出文档。Doxygen的配置文件,有辅助的GUI工具帮助书写,你只需要改几个选项,点几下按钮就信手拈来了。但在此强烈建议,你应该把Doxygen每一个配置值的含义都了解一下,写一些简单的例子实践一下,这样一则你可以清楚的明白你需要的格式该如何配置出来,二则你可以充分了解Doxygen可以做到什么程度,以备不时之需。。。
Doxygen通常是用作生成英文文档的,生成中文文档需要修改输入和输出的码制,这样可以改变解析方式,生成中文文档。但是,你必须意识到,Doxygen在从注释中抽取信息是需要做语法解析的,这些解析都是基于英文的基础,不可能在这个层面上支持中文。比如,一个类的简明信息和详细信息的分隔,是通过英文的句号“.”来识别的,如果你用中文的句号“。”,Doxygen就分辨不出来了。再比如,在某个类的注释中,你写 Created by xxx function,其中xxx是某个方法名,Doxygen会在生成的文档中,自动为该函数添加上链接。当如果你用中文:该类是被xxx方法构造出来的。 Doxygen就无法抽取出该信息并添上链接。你要按如下格式来写:该类是被 xxx 方法构造出来的。用强行的人肉空格帮助Doxygen。所有类似的问题都可以以此类推。。。
我们说,Doxygen无法识别光秃秃的代码信息,这并不意味着代码结构对Doxygen来说不重要。Doxygen可以对各种语言书写的代码进行优化,比如你开启C++代码优化后,Doxygen会解析你写的C++代码,添加更多更具体的信息,并依照之间联系为你添加链接。这也就是说,Doxygen会产生真实的代码结构表示出来的东西,你在写注释的时候也应该按照严谨的代码结构去写。比如,你在某个类A的注释中写道:此类用到了 B 类中的方法。假设B这个类,在名字空间N1内,如果,你的A类同样也是在N1内,这个链接Doxygen会为你自动添加,但是,如果B这个类在名字空间 N2内,Doxygen会无视你的请求。你必须严格的写它的全名 N2::A,Doxygen才会欣然接受这个娃。。。
我在做的项目比较小,因此我利用Doxygen的ToDo-List和Bug列表对项目进行简单的管理。比如,有一个类你有一些后续的工作没有完成,你可以在其注释中加上@todo xxx,(这只是其中一种语法,不是唯一的规范...)Doxygen会将其链接添加到一个to do list中,并为该to do list生成一个页面,查看起来颇为方便。同样,Bug标记也是这么用这么看的,举一反三大家都会,我就不多磨叽了。。。
Doxygen中利用到很多第三方的基于编译的信息生成工具,辅助生成更为炫目的文档。比如,你可以在注释中嵌入符合tex标准的公式,Doxygen帮助你把这些显示到你的文档中来;你还可以为你的文档自动生成继承图,组合图,UML格式的图,等品种齐全的图,只要你把Graphviz装上,并打开相关参数即可。更漂亮的是,利用Graphviz的dot方法,你可以将符合其格式的画图指令写在注释中,场景图,架构图,流图,交互图,隔壁校长含泪跳楼图,只要你能用Graphviz画出,Doxygen都能给你用上,图例想改就改想变就变,幸福生活,不过尔尔。而关于Graphviz,g9老大已经推荐过了,再多的好话也就显得苍白。这东西无疑是好东西,方便的一塌糊涂,对于常年和代码打交道对直观之物缺失判断的程序员而言,这无疑是居家旅行杀人必备的水果刀。但要把水果刀玩的和关公大刀似的,是需要不俗功力的,像我这样三脚猫的功夫,就只能关注功能而无法挑战美观了。。。
其他的信息,比如author,date,group,之类的,我都会要求写注释的时候加上,举手之劳,可以方便很多后续可能出现的问题。每一个简单到无需注释的函数,也要加一个空的注释头,以便生成文档的时候,所有的方法都齐备;如果有需要,你可以修改配置文件的设置,把代码也绑定进文档,这样别人只要拿着文档一看,几乎就完全不用在添一份代码放在手上了。。。
把文档与代码绑定在一起,这是用Doxygen之类工具的一个好处,它至少可以产生两个方面的生产力。一方面,它可以帮助你构建结构良好的文档,生成真正可看好看的文档来;另一方面,它可以刺激你更新文档,把文档工具当作项目管理工具用起来。当然,如果文档就在你写的代码上面两行你都懒的看一眼,那么,啥工具也挽救不了了。用这类工具,必须要文档代码配合着写,配合着看,把它提升到和写单元测试一个习惯级别来,看一眼注释,写一段代码,然后测一测,改改过期注释,就像蘸酱卷饼吃黄瓜一样一气呵成,那么,Doxygen就可以今夜做梦也会笑了。。。

Doxygen简单经验谈。。。的更多相关文章

  1. 使用doxygen为C/C++程序生成中文文档

    文章来自:http://www.fmddlmyy.cn/text21.html 依照约定的格式凝视源码,用工具处理凝视过的源码产生文档.通过这样的方式产生文档至少有下面优点: 便于代码和文档保持同步. ...

  2. the rust book 的简单入门笔记

    rust learning day 1 (2021/05/27) 学了常量,变量,数据类型,控制流,所有权 char 的宽度是4字节,一个 unicode 的宽度 控制流条件都不要括号 rust 中的 ...

  3. doxygen的简单使用(快速上手)

    在网上找了很久一个简单的doxygen教程,这个是最简单的,让你看完之后马上就能写doxygen格式的代码 doxygen是一种从源代码生成文档的工具,支持多种语言.当然,源代码中需按一定的格式写注释 ...

  4. Fabio 安装和简单使用

    Fabio(Go 语言):https://github.com/eBay/fabio Fabio 是一个快速.现代.zero-conf 负载均衡 HTTP(S) 路由器,用于部署 Consul 管理的 ...

  5. Android App的设计架构:MVC,MVP,MVVM与架构经验谈

    相关:http://www.cnblogs.com/wytiger/p/5996876.html 和MVC框架模式一样,Model模型处理数据代码不变在Android的App开发中,很多人经常会头疼于 ...

  6. Windows下使用doxygen阅读和分析C/C++代码

    Windows下使用doxygen阅读和分析C/C++代码 转自:http://blog.sina.com.cn/s/blog_63d902570100gwk6.html 虽然使用各种IDE或者Sou ...

  7. 使用Xcode HeaderDoc和Doxygen文档化你的Objective-C和Swift代码

    在一个应用的整个开发过程中涉及到了无数的步骤.其中一些是应用的说明,图片的创作,应用的实现,和实现过后的测试阶段.写代码可能组成了这个过程的绝大部分,因为正是它给了应用生命,但是这样还不够,与它同等重 ...

  8. doxygen的使用(一)配置并生成文档

    原创文章,欢迎阅读,禁止转载. doxygen是个好用的文档生成工具,他的强大功能有很多介绍,我就不说了.自带的chm帮助手册很全面,包括功能.注释规范.怎么配置.工具用法等.doxygen的用法共3 ...

  9. 用doxygen+graphviz自动化生成代码文档(附详细教程)

    一.引子 用这两个工具可以自动的遍历代码,并且产生代码文档,我们先来看看效果,然后放出这两个工具的下载地址. 二.工具的下载地址 doxygen:http://www.stack.nl/~dimitr ...

随机推荐

  1. Luogu2482 [SDOI2010]猪国杀 ---- 模拟

    Luogu2482 [SDOI2010]猪国杀 题意 ...... https://www.luogu.org/problemnew/show/P2482 总结 首先说一下代码的构思: 首先确定了所有 ...

  2. BZOJ4277 : [ONTAK2015]Cięcie

    假设分成如下三段: [1..i][i+1..j][j+1..n] 考虑中间那一段,设f[i]为前i位组成的数模q的值,pow[i]为$10^i$模q的值,那么有: f[j]-f[i]*pow[j-i] ...

  3. Linux学习笔记04—IP配置

    一.自动获取IP只有一种情况可以自动获取IP地址,那就是你的Linux所在的网络环境中有DHCP服务.只要你的真机可以自动获取IP,那么安装在虚拟机的Linux同样也可以自动获取IP. 方法很简单,只 ...

  4. phpexcel导出excel等比例缩放图片

    list($width, $height, $type, $attr) = getimagesize($img_path); if( $width>100 || $height >100 ...

  5. 大型电商业务架构 IT大咖说 - 大咖干货,不再错过

    大型电商业务架构 IT大咖说 - 大咖干货,不再错过 http://www.itdks.com/dakashuo/new/dakalive/detail/591

  6. 使用GSON和泛型解析约定格式的JSON串(转)

    时间紧张,先记一笔,后续优化与完善. 解决的问题: 使用GSON和泛型解析约定格式的JSON串. 背景介绍: 1.使用GSON来进行JSON串与java代码的互相转换. 2.JSON的格式如下三种: ...

  7. HDU 4818 Golden Radio Base (2013长春现场赛B题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4814 进制转换. 现场根据题目给的两个公式,不断更新!!! 胡搞就可以了. 现场3A,我艹,一次循环开 ...

  8. Windows 2008 R2防火墙设置运行被ping通

    参考文献: http://huobumingbai.blog.51cto.com/1196746/323896/

  9. C#面向服务WebService从入门到精通

    <C#面向服务WebService从入门到精通>包含以下两个部分: 一.<C#远程调用技术WebService修炼手册[基础篇]>本次分享课您将学习到以下干货知识点:1).We ...

  10. 淡淡理解下AngularJS中的module

    在AngularJS中module是一个核心的存在,包括了很多方面,比如controller, config, service, factory, directive, constant, 等等. 在 ...