用Doxygen生成文档

时间:2021-12-13 15:59:06

我是生成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生成文档的更多相关文章

  1. 使用 Doxygen 生成文档 (以FFmpeg 4&period;1&period;1 为例)

    背景 在查找 ffmpeg 文档的时候,发现其文档是根据 Doxygen 生成的. 为了学习方便,这里以 生成 ffmpeg 4.1 文档 为例. 注:为了兼顾 arm 与 host ,本人选择了同时 ...

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

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

  3. 用doxygen自动生成文档

    1. 添加符合doxygen解析规则的注释 (比如函数说明,函数参数/返回值说明) 用qt-creator可以在函数上方一行键入“/**”,然后直接回车,就可以自动生成默认的格式. 2. 安装doxy ...

  4. linux c&sol;c&plus;&plus; 代码使用 doxygen 自动生成文档

    www.doxygen.org 的使用非常方便,下面分成2步介绍一下 1. 注释风格,需要在c/c++代码中按照下面的风格添加注释,基本上还是很顺手的 C++的注释风格 主要使用下面这种样式:即在注释 ...

  5. 为Unity项目生成文档&lpar;二&rpar;

    Unity项目生成文档 接着上篇文章:为Unity项目生成文档(一) .Net项目可在VS配置XML 我们可以在VS中通过配置来生成xml文件,但是unity的project,就算同样配置了xml文档 ...

  6. xcode 自动添加注释,生成文档

    一.自动生成注释代码        添加一个快捷键,生成 注释代码        ThisService 下载连接:http://wafflesoftware.net/thisservice/     ...

  7. 使用 Swagger 自动生成 ASP&period;NET Core Web API 的文档、在线帮助测试文档(ASP&period;NET Core Web API 自动生成文档)

    对于开发人员来说,构建一个消费应用程序时去了解各种各样的 API 是一个巨大的挑战.在你的 Web API 项目中使用 Swagger 的 .NET Core 封装 Swashbuckle 可以帮助你 ...

  8. 使用Ldoc给Lua生成文档

    Ldoc介绍 LDoc是一个Lua的文档生成工具,过去,比较常用的Lua生成文档的工具是LuaDoc,可惜作者自从2008年之后就再也没有发布过新的版本了,说明作者基本上已经放弃维护了.而LDoc则是 ...

  9. 使用PhpDocumentor生成文档

    一,网站根目录执行 $ composer require --dev phpdocumentor/phpdocumentor 二,进入vendor/bin/目录执行 $phpdoc -d D:\ser ...

随机推荐

  1. 2------------NLPIR(ICTCLAS2016)分词系统添加用户词典功能

    备注:win7 64位系统,netbeans编程 基本代码框架参见我的另一篇文章:NLPIR分词功能 代码实现: package cwordseg; import java.io.Unsupporte ...

  2. Git的配置及常用命令

    Git配置 git config --global user.name "<username>" git config --global user.email &quo ...

  3. Redis漏洞?阿里云被攻击!

    今天运维那边过来说阿里云服务器进程被占用很多,后来查了一下进程发现了这个玩意: 小编我看不懂,经运维先森仔细研究,发现这是被注入进来的一个进程,服务器被当成了肉鸡,专门用来跑比特币的,这样对方就不需要 ...

  4. Linux命令自己总结

    对于每一个Linux学习者来说,了解Linux文件系统的目录结构,是学好Linux的至关重要的一步.,深入了解linux文件目录结构的标准和每个目录的详细功能,对于我们用好linux系统只管重要,下面 ...

  5. Linphone iOS客户端编译时打开G729支持

    Assuming you were able to compile the SDK and the linphone XCode project, here is what you need to d ...

  6. prepare PDO

    <?php $sql='SELECT email FROM users WHERE id = :id'; $statement=$pdo->prepare($sql);$userId=fi ...

  7. django templates学习使用记录

    可以在基本模板中多插入几个black来适应不同的布局

  8. &lbrack;转&rsqb;C&num;综合揭秘——细说进程、应用程序域与上下文之间的关系

    引言 本文主要是介绍进程(Process).应用程序域(AppDomain)..NET上下文(Context)的概念与操作.虽然在一般的开发当中这三者并不常用,但熟悉三者的关系,深入了解其作用,对提高 ...

  9. 基于dojo模板的widget

    参考:http://niweiwei.iteye.com/blog/1539863 http://dojotoolkit.org/reference-guide/1.8/dijit/_Template ...

  10. 计算机原理学习(2)-- 存储器和I&sol;O设备和总线

    前言 前一篇文章介绍了冯诺依曼体系结构的计算机的基本工作原理,其中主要介绍了CPU的结构和工作原理.这一篇主要来介绍存储区,总线,以及IO设备等其他几大组件,来了解整个计算机是如何工作的. 这些东西都 ...