用Doxygen生成文档
我是生成C/C++的文档,输出html格式的文档。就不做成CHM了。
注释要这种写:(当然,有数种注释风格,选择任意你喜欢的就行)
/**
*
* 一系列的doxygen的 command
*
*
*/
具体参考这里:http://www.stack.nl/~dimitri/doxygen/manual/docblocks.html
我常用的就@class @brief @enum @fn @return @throws @param[in] @param[out] @date @file @warning
所有指令的参考:http://www.stack.nl/~dimitri/doxygen/manual/commands.html#cmd_intro
如果要支持以上注释风格的文档化,必须在DoxyFile(配置文件)中的变量 JAVADOC_AUTOBRIEF 设置为YES。
下面是源文件注释的样例参考:’
/**
* @file novella.h
* @brief 控制Novella变频器
* @author Alex Chen
* @version 1.0
* @date 2015-7-19
*/ #ifndef NOVELLA_H
#define NOVELLA_H #include <string>
#include "snmp_pp/snmp_pp.h" #define NOVELLA_EXPORT #ifdef NOVELLA_EXPORT
#define NOVELLA_API __declspec(dllexport)
#else
#define NOVELLA_API //__declspec(dllimport)
#endif class CSerialPort; typedef int BOOL;
#define bTRUE 1
#define bFALSE 0 template class __declspec (dllexport) std::basic_string<char>; /**
* @class Novella
* @brief 访问控制变频器的类
*/
class NOVELLA_API Novella{ public:
/**
* @enum PROTOCOL
* @brief 与设备通信的协议类型
*/
enum PROTOCOL
{
SERIAL_PORT, /**< 串口 */
SNMP, /**< SNMP协议 */
NETWORK /**< 网络协议,目前无效保留参数*/
}; /**
* 用于初始化串口的构造函数。并打开设备。
* @fn Novella(const std::string &comName, char dev_addr, const PROTOCOL& protocol, int baud = 9600, char parity = 'N', int databits = 8, int stopbits = 1)
* @param[in] comName 串口名,大小写不敏感。
* @param[in] dev_addr 变频器的设备地址,地址的形式是字符A,B,C,D,E ,依此类推。目前只支持到E。
* @param[in] protocol 使用何种协议对设备进行访问
* @param[in] baud 波特率
* @param[in] parity 校验位
* @param[in] databits 数据位
* @param[in] stopbits 停止位
* @throws -1 打开串口失败
*/
Novella(const std::string &comName, char dev_addr, const PROTOCOL& protocol, int baud = , char parity = 'N', int databits = , int stopbits = ); /**
* 用于初始化SNMP协议的构造函数。并打开设备
* @fn Novella(const std::string &ip,const std::string &dev_type, const PROTOCOL& protocol)
* @param[in] ip 设备的IP地址。
* @param[in] protocol 使用何种协议对设备进行访问。
*/
Novella(const std::string &ip, const PROTOCOL& protocol); /**
* 析构函数,关闭设备。
* @fn ~Novella()
*/
~Novella(); /**
* 得到设备类型,目前为无效保留函数
* @fn std::string getDevType() const
* @return 返回值为设备类型
*/
std::string getDevType() const; /**
* 获取设备中心频点
* @fn int getFreq(int& freq)
* @param[out] freq 频率值
* @return 返回值为-1表示失败,为0表示成功
*/
int getFreq(int& freq); /**
* 设置设备中心频点
* @fn int setFreq(int freq)
* @param[in] freq 频率值
* @return 返回值为-1表示失败,为0表示成功
*/
int setFreq(int freq); /**
* 获取设备是否为远程模式
* @fn int getRemote(bool& remote)
* @param[out] remote true为远程模式,false为本地模式
* @return 返回值为-1表示失败,为0表示成功
*/
int getRemote(bool& remote); /**
* 设置设备是否为远程模式
* @fn int setRemote(bool remote)
* @param[in] remote true为远程模式,false为本地模式
* @return 返回值为-1表示失败,为0表示成功
*/
int setRemote(bool remote); /**
* 获取设备的衰减值
* @fn int getAtten(int &atten)
* @param[out] atten 衰减值
* @return 返回值为-1表示失败,为0表示成功
*/
int getAtten(int &atten); /**
* 设置设备的衰减值
* @fn int setAtten(int atten)
* @param[in] atten 衰减值
* @return 返回值为-1表示失败,为0表示成功
*/
int setAtten(int atten); /**
* 获取设备是否为静音模式
* @fn int getMute(bool &mute)
* @param[out] mute true为静音模式,false为非静音模式
* @return 返回值为-1表示失败,为0表示成功
*/
int getMute(bool &mute); /**
* 设置设备是否为静音模式
* @fn int setMute(bool mute)
* @param[in] mute true为静音模式,false为非静音模式
* @return 返回值为-1表示失败,为0表示成功
*/
int setMute(bool mute); /**
* 获取设备的Spectrum状态
* @fn int getInvert(bool &invert)
* @param[out] true为Invert,false为为Preserve
* @return 返回值为-1表示失败,为0表示成功
*/
int getInvert(bool &invert); /**
* 获取设备的Spectrum状态
* @fn int setInvert(bool invert)
* @param[in] true为Invert,false为Preserve
* @return 返回值为-1表示失败,为0表示成功
*/
int setInvert(bool invert); private: ////////////////////////SerialPort/////////////////////
//status request
void StatusRequestCommand(char addr); int FreqGet(int &freq);
int AttenGet(int &adde);
int MuteGet(BOOL &mute);
int RemoteGet(BOOL &remote);
int InvertGet(BOOL &invert); bool SerialSend(char *ch);
bool SerialRead(char *data); int Command_5bit(char conaddr, char com); ////////////////////////////////snmp/////////////// std::string get_param(const char *param, std::string value);
int get_param(const char *param, int &value);
void set_param_int(const char *param, int value); private: ////////////////////////////SerialPort////////////////////////// CSerialPort *m_serialPort; char m_dev_addr;
int m_freq;
int m_atten; bool m_isRemote;
bool m_isInvert;
bool m_isMute;
bool m_bSerialPortOpened; std::string m_devType;
std::string m_comName;
std::string m_ip; PROTOCOL m_currentProtocol; ////////////////////////////////snmp////////////////////////// std::string m_unitname;
BOOL m_remote;
BOOL m_invert;
BOOL m_mute; //----------snmp parameters----------------------
snmp_version version;
int retries;
int timeout;
u_short port; UdpAddress *nfcaddress;
Snmp *snmp;
CTarget *ctarget; }; #endif
配置文件用DoxyGen自带的GUI前端工具生成个配置文件的框架(front-end工具说明在这里:http://www.stack.nl/~dimitri/doxygen/manual/doxywizard_usage.html),然后自己用文本编辑器改就行了。就不做介绍了。
这里有配置文件的变量开关的作用介绍:http://www.stack.nl/~dimitri/doxygen/manual/config.html
一般我就用到
PROJECT_NAME = 你的工程名
FILE_PATTERNS = 如果是C/C++的,就设置为
FILE_PATTERNS = *.c \
*.cc \
*.cxx \
*.cpp \
*.c++ \
*.h \
*.hxx \
*.hpp \
PROJECT_BRIEF = 你的工程简介
OUTPUT_DIRECTORY = 工程文档生成输出的目录路径
OUTPUT_LANGUAGE = 文档的语言,如果是中文就设成Chinese
JAVADOC_AUTOBRIEF = 一般设置为YES
DOXYFILE_ENCODING = DoxyFile文件本身的编码格式,用UTF-8不带BOM
INPUT = 源文件的路径,一般DoxyFile也放这个路径下
INPUT_ENCODING = 源文件的编码,一般用UTF-8不带BOM
RECURSIVE = 一般设置为YES,这样可以递归处理源文件子目录
EXCLUDE_PATTERNS = 用来设置忽略子目录的。就是不把某目录,或者文件,当作输入文件,不想文档化的东西可以包含进来
EXCLUDE_PATTERNS = */snmp++/* \
*/Debug/* \
*/ipch/* \
比如以上是VS系列的东西,Debug,和ipch,SNMP++里面的东西我不想文档化。
INLINE_SOURCES = 文档内嵌代码接口实现,一般我设置为YES。如果公开给客户,需要关闭吧,设置为NO
STRIP_CODE_COMMENTS = 一般设置为YES,忽略非特殊格式的注释,就是普通注释
GENERATE_HTML = 设置为YES,如果需要要生成html格式的
HTML_OUTPUT = html
HTML_FILE_EXTENSION = .html html格式的文件后缀
一般以下几个变量我都会设置为YES,调用关系图和包含关系图等。
INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = YES
CALL_GRAPH = YES
CALLER_GRAPH = YES
GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = YES
最后配置文件写完了就是使用doxygen命令:
doxygen [DoxyFile]
具体参考这里用法:http://www.stack.nl/~dimitri/doxygen/manual/doxygen_usage.html
可能用到的额外工具:
iconv------这个用来递归处理某路径下源文件的编码转换。这样在用Doxygen文档化源代码
references:
http://blog.csdn.net/fmddlmyy/article/details/1663898
用Doxygen生成文档的更多相关文章
- 使用 Doxygen 生成文档 (以FFmpeg 4.1.1 为例)
背景 在查找 ffmpeg 文档的时候,发现其文档是根据 Doxygen 生成的. 为了学习方便,这里以 生成 ffmpeg 4.1 文档 为例. 注:为了兼顾 arm 与 host ,本人选择了同时 ...
- doxygen的使用(一)配置并生成文档
原创文章,欢迎阅读,禁止转载. doxygen是个好用的文档生成工具,他的强大功能有很多介绍,我就不说了.自带的chm帮助手册很全面,包括功能.注释规范.怎么配置.工具用法等.doxygen的用法共3 ...
- 用doxygen自动生成文档
1. 添加符合doxygen解析规则的注释 (比如函数说明,函数参数/返回值说明) 用qt-creator可以在函数上方一行键入“/**”,然后直接回车,就可以自动生成默认的格式. 2. 安装doxy ...
- linux c/c++ 代码使用 doxygen 自动生成文档
www.doxygen.org 的使用非常方便,下面分成2步介绍一下 1. 注释风格,需要在c/c++代码中按照下面的风格添加注释,基本上还是很顺手的 C++的注释风格 主要使用下面这种样式:即在注释 ...
- 为Unity项目生成文档(二)
Unity项目生成文档 接着上篇文章:为Unity项目生成文档(一) .Net项目可在VS配置XML 我们可以在VS中通过配置来生成xml文件,但是unity的project,就算同样配置了xml文档 ...
- xcode 自动添加注释,生成文档
一.自动生成注释代码 添加一个快捷键,生成 注释代码 ThisService 下载连接:http://wafflesoftware.net/thisservice/ ...
- 使用 Swagger 自动生成 ASP.NET Core Web API 的文档、在线帮助测试文档(ASP.NET Core Web API 自动生成文档)
对于开发人员来说,构建一个消费应用程序时去了解各种各样的 API 是一个巨大的挑战.在你的 Web API 项目中使用 Swagger 的 .NET Core 封装 Swashbuckle 可以帮助你 ...
- 使用Ldoc给Lua生成文档
Ldoc介绍 LDoc是一个Lua的文档生成工具,过去,比较常用的Lua生成文档的工具是LuaDoc,可惜作者自从2008年之后就再也没有发布过新的版本了,说明作者基本上已经放弃维护了.而LDoc则是 ...
- 使用PhpDocumentor生成文档
一,网站根目录执行 $ composer require --dev phpdocumentor/phpdocumentor 二,进入vendor/bin/目录执行 $phpdoc -d D:\ser ...
随机推荐
- html5中input新增type值的使用
二狗在最近的项目以html5和webapp为主,并接触到了input新增type值的使用,下面就把这些玩意一一以实例列举出来 一:type = date:定义日期:年-月-日 input type=& ...
- web前端面试试题总结---css篇
CSS 介绍一下标准的CSS的盒子模型?低版本IE的盒子模型有什么不同的? (1)有两种, IE 盒子模型.W3C 盒子模型: (2)盒模型: 内容(content).填充(padding).边界(m ...
- Lucene自定义扩展QueryParser
Lucene版本:4.10.2 在使用lucene的时候,不可避免的需要扩展lucene的相关功能来实现业务的需要,比如搜索时,需要在满足一个特定范围内的document进行搜索,如年龄在20和30岁 ...
- Mybatis插入语句useGeneratedKeys="true"的用法
<!-- 插入新的问题件 --> <!-- useGeneratedKeys="true"把新增加的主键赋值到自己定义的keyProperty(id)中 --&g ...
- JavaScript 浮点数运算 精度问题
JavaScript小数在做四则运算时,精度会丢失,这会在项目中引起诸多不便,先请看下面脚本. //加减 <script type="text/javascript" lan ...
- C# 窗口传值的方法
方法一: A to B 设置FormB 为 带参数的构造函数 public Form2( object msg) { InitializeComponent(); } 方法二: A to B 定义一 ...
- c#将Excel数据导入到数据库的实现代码(转载)
假如Excel中的数据如下: 数据库建表如下: 其中Id为自增字段: 代码如下: using System; using System.Collections.Generic ...
- smarty半小时快速上手教程(转)
来源于:http://www.chinaz.com/program/2010/0224/107006.shtml 一:smarty的程序设计部分: 在smarty的模板设计部分我简单的把smarty在 ...
- Android学习笔记:如何设置ImageView中图片的显示方式
我们在用ImageView显示图片时,很多情况下图片的大小与ImageView的尺寸不是完全一样的.这时就涉及到该如何设置显示图片了. ImageView有个重要的属性是ScaleType,该属性用以 ...
- SQL Server 和CLR集成
通过在 Microsoft SQL Server 中托管 CLR(称为 CLR 集成),可以在托管代码中编写存储过程.触发器.用户定义函数.用户定义类型和用户定义聚合函数. 因为托管代码在执行之前会编 ...