整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

不得不会的代码注释工具-doxygen

得不会的代码注释工具——doxygen

下载

官网下载二进制或者直接用yum或apt工具下载。

使用流程

  • 进入项目目录生成doxygen配置文件
  • doxygen -g
  • 修改doxygen配置文件
  • # 程序文档输出目录 OUTPUT_DIRECTORY = doc/ # 程序文档语言环境 OUTPUT_LANGUAGE = Chinese # 如果是制作 C 程序文档,该选项必须设为 YES,否则默认生成 C++ 文档格式 OPTIMIZE_OUTPUT_FOR_C = YES # 对于使用 typedef 定义的结构体、枚举、联合等数据类型,只按照 typedef 定义的类型名进行文档化 TYPEDEF_HIDES_STRUCT = YES # 在 C++ 程序文档中,该值可以设置为 NO,而在 C 程序文档中,由于 C 语言没有所谓的域/名字空间这样的概念,所以此处设置为 YES HIDE_SCOPE_NAMES = YES # 让 doxygen 静悄悄地为你生成文档,只有出现警告或错误时,才在终端输出提示信息 QUIET = YES # 只对头文件中的文档化信息生成程序文档 FILE_PATTERNS = *.h # 递归遍历当前目录的子目录,寻找被文档化的程序源文件 RECURSIVE = YES # 示例程序目录 EXAMPLE_PATH = example/ # 示例程序的头文档 (.h 文件) 与实现文档 (.c 文件) 都作为程序文档化对象 EXAMPLE_PATTERNS = *.c \ *.h # 递归遍历示例程序目录的子目录,寻找被文档化的程序源文件 EXAMPLE_RECURSIVE = YES # 允许程序文档中显示本文档化的函数相互调用关系 REFERENCED_BY_RELATION = YES REFERENCES_RELATION = YES REFERENCES_LINK_SOURCE = YES # 不生成 latex 格式的程序文档 GENERATE_LATEX = NO # 在程序文档中允许以图例形式显示函数调用关系,前提是你已经安装了 graphviz 软件包 HAVE_DOT = YES CALL_GRAPH = YES CALLER_GRAPH = YES #让doxygen从配置文件所在的文件夹开始,递归地搜索所有的子目录及源文件 RECURSIVE = YES #在最后生成的文档中,把所有的源代码包含在其中 SOURCE BROWSER = YES $这会在HTML文档中,添加一个侧边栏,并以树状结构显示包、类、接口等的关系 GENERATE TREEVIEW = ALL EXTRACT_ALL:这个标记告诉 doxygen,即使各个类或函数没有文档,也要提取信息。必须把这个标记设置为 Yes。 EXTRACT_PRIVATE:把这个标记设置为 Yes。否则,文档不包含类的私有数据成员。 EXTRACT_STATIC:把这个标记设置为 Yes。否则,文档不包含文件的静态成员(函数和变量)。
  • 生成文档
  • doxygen ./Doxyfile

注释规则

项目注释

项目注释块用于对项目进行描述,每个项目只出现一次,一般可以放在main.c主函数文件头部。对于其它类型的项目,置于定义项目入口函数的文件中。对于无入口函数的项目,比如静态库项目,置于较关键且不会被外部项目引用的文件中。 项目注释块以“/** @mainpage”开头,以“*/”结束。包含项目描述、及功能描述、用法描述、注意事项4个描述章节。 项目描述章节描述项目名称、作者、代码库目录、项目详细描述4项内容,建议采用HTML的表格语法进行对齐描述。 功能描述章节列举该项目的主要功能。 用法描述章节列举该项目的主要使用方法,主要针对动态库、静态库等会被其它项目使用的项目。对于其它类型的项目,该章节可省略。 注意事项章节描述该项目的注意事项、依赖项目等相关信息

/**@mainpage  
* @section   项目详细描述
*
* @section   功能描述  
* 
* @section   用法描述 
* 

**********************************************************************************
*/

项目注释也可以使用markdown文件作为主页,通过指定md文件路径来配置。

USE_MDFILE_AS_MAINPAGE = doc/readme.md

若markdown文件里包含图片,可能会出现图片无法显示的情况,这个时候需先检查图片路径是否正确,同时还需要在doxyfile中添加图片路径方可显示。

IMAGE_PATH             = ./doc/images 

文件注释

/**
 * @file 文件名
 * @brief 简介
 * @details 细节
 * @mainpage 工程概览
 * @author 作者
 * @version 版本号
 * @date 年-月-日
 */

全局常量/变量/宏定义/结构体定义/类定义的注释

/// 缓存大小
#define BUFSIZ 1024*4
#define BUFSIZ 1024*4 ///< 缓存大小

函数注释

/**
 * @brief 函数简介
 *
 * @param 形参 参数说明
 * @param 形参 参数说明
 * @return 返回值说明
*/

reference

  1. https://blog.srefan.com/2020/05/doxygen-generate-docs/

nginx的作用不在此赘述,下面主要记录部分简单地使用场景。以下基于“ubuntu 18.04 server”版本验证。

适用场景:

  • 统一鉴权
  • 目录重定向
  • 绝对相对路径
  • 服务处于NAT后(外部端口和内部端口不一致)

非适用场景:

  • 不同端口区分不同服务,参考创建即可

软件

安装软件:需要使用apache2-utils中的htpasswd

sudo apt-get install nginx
sudo apt install apache2-utils

查看服务状态: +号说明服务处于up状态

service --status-all
......
[ + ] nginx
......

修改配置:具体如何修改见后面章节

sudo vi /etc/nginx/sites-enabled/default

重启nginx服务:修改配置后,需要重启nginx

service nginx restart

统一鉴权 | 目录重定向 | 绝对和相对路径

使用要求:

  1. 外网服务器仅开放一个端口9999,该端口需要实现多种web服务
  2. web服务需要进行鉴权服务

设计要求:

  1. 上面的需求可以通过nginx反向代理实现
  2. 需要配置服务器,使外部端口9999映射到nginx服务器的8081端口(8081端口可以按需自定义)
  3. 通过访问不同的url实现访问不同的服务(如下表)
  4. 鉴权方式可以使用htpasswd来实现
  5. 为了跳转正常,有的需要绝对目录有的需要相对目录

外部URL

NAT处理

内部URL

http://$wanip:9999/source/

http://$nginxip:8081/source/

鉴权成功 --> 打开http://$hostip:666/xxx

http://$wanip:9999/git/xxx

http://$nginxip:8081/git/xxx

鉴权成功 --> 打开http://$hostip:777/git/xxx

  • $wanip: 外部IP地址
  • 9999:外部端口
  • $nginxip:外部映射到内部的nginx地址(多数应用或路由器都可以配置)
  • 8081:外部映射到内部的端口(多数应用或路由器都可以配置)
  • $hostip:内网部署的服务地址,可以是在不同的服务器上
  • 666或777:内网部署的服务端口

nginx配置: /etc/nginx/sites-enabled/default 文件内容

server {
        listen 8081;
        server_name localhost;
        location ^~ /source/ {
                auth_basic              "source";
                auth_basic_user_file    /home/wsk/htpasswd.conf;
                proxy_pass              http://127.0.0.1:666/;
                proxy_set_header        X-Forwarded-For $remote_addr;
                proxy_set_header        Host $host;
        }
        location ^~ /git/ {
                auth_basic              "git";
                auth_basic_user_file    /home/wsk/htpasswd.conf;
                proxy_pass              http://127.0.0.1:777;
                proxy_set_header        X-Forwarded-For $remote_addr;
                proxy_set_header        Host $host;
        }
}


注意:

1.因为条件有限,上面的配置,并不包含NAT的过程。如果服务处于NAT后,上面的配置需要做如下变更:其中9999对应的是外部的端口

                 proxy_set_header Host $host:9999;

2.location ^~中的^~为匹配前缀路径,详见参考

增加账号:

touch htpasswd.conf (首次执行必选)
htpasswd -b htpasswd.conf $usrname $passwd

创建source对应的服务:

  1. 以开源代码simple-tftp为例,通过doxygen生成html(doxygen如何使用,见我的博客), html存放路径: wsk@wsk:~/nginx/source/simple-tftp/html
  2. 通过python创建http服务: sudo python3 -m http.server 666 (首先需要cd到上面目录中)

创建git对应的服务:

  1. 以开源代码simple-tftp为例,直接通过创建http服务sudo python3 -m http.server 777
  2. git服务使用的相对路径,所以创建http服务的路径必须包含git目录

带路径访问

访问source: 第一次访问的时候,会先进行鉴权,当鉴权成功后才能继续访问重定向的网站



访问git服务: 如果第一次访问source已经输入过密码了,这次访问git就不需要再次输入。



参考

  • nginx反向代理proxy_pass绝对路径和相对路径 - 简书
  • 一文彻底读懂nginx中的location指令 - 知乎

提示

为了更好的阅读体验,建议访问个人首发地址: nginx应用 反向代理,统一鉴权,目录重定向 - whilewell - 博客园


、前言

以前,我们学C语言的时候,多多少少都查过一些标准库函数吧。这里介绍查找C语言的标准库函数的两种方法:一种方法是直接到http://www.cplusplus.com这个网站上去查看:

这里覆盖了C语言标准库中的所有函数,给出了每个函数的介绍并且都给出了具体的用法示例,比如:

只不过都是英文的说明,可见英文的重要性。

另一种方法是,找一些离线的文档,网上有不少人整理了一些离线的文档,比如.chm格式(已编译的帮助文件)的文档:

里面大概是这样子的:

也可以很方便的查找每个函数的用法,但是,这里面的不是很全,所以查找C标准库函数还是建议到http://www.cplusplus.com上面去查找。

本文分享的重点就是.chm文件的制作。最近需要对自己的一些代码做一些整理,发现整理成.chm文件是个不错的选择,.chm文件可以根据我们的代码生成,下面把生成.chm文件的方法分享给大家。

二、制作.chm文件的工具

需要三个工具:doxygen安装包、graphviz安装包、htmlhelp安装包。其中doxygen是一种开源跨平台的文档系统,doxygen可以从一套归档源文件开始,生成HTML格式的在线类浏览器,或离线的LATEX、RTF参考手册。

doxygen可以生成好几种格式的文档,要生成.chm格式的手册就必须安装htmlhelp,要生成关系图必须安装依graphviz。这个个工具的获取方法:

1、方法一:官网下载

(1)doxygen安装包:

http://www.doxygen.nl/download.html

(2)graphviz安装包:

http://www.graphviz.org/

(3)htmlhelp安装包:

https://www.microsoft.com/en-us/download/details.aspx?id=21138

2、方法二:百度云盘下载

链接:https://pan.baidu.com/s/1gsJxkGsoO0ncy0GGM6PyQw 提取码:3754

若链接失效可联系我。

下载的都是.exe格式的可执行文件,就按平时安装软件的方法安装件就可以了。但是,需要记住graphviz与htmlhelp的安装路径,后面使用Doxygen时需要用到。

三、Doxygen根据代码生成.chm的机制

Doxygen可以根据固定格式的代码注释生成相对应的.chm格式的手册。支持的语言有好多种,如C/C++/C#/Objective-C/PHP/Java等。这里主要是分享C语言,Doxygen可以识别的固定格式注释有以下几种:

这里,我使用第一种,如:

/**
 * 函数功能:字符串逆序函数
 * @param src_str:字符串
 * @param str_len:字符串长度
 * @return 逆序之后得到的字符串
 */ 
char *Str_ReverseOrder(char *src_str,int str_len)
{
	char *dst_str = src_str;
	char temp;
	printf("Method 1!\n");
	for(int i=0;i<str_len/2;i++)
	{
		temp = src_str[i];					
		src_str[i] = src_str[str_len-i-1];  
		src_str[str_len-i-1] = temp;		
	}
	
	return (char*)dst_str;
}

所有的函数都使用这样统一格式的注释。

四、Doxygen生成.chm文件的方法

1、设置工程工作目录

2、设置编程语言

3、设置输出文件格式

4、设置生成的关系表

5、输出的语言、编码

6、设置一些构建的选择项

7、设置输入文件的编码

8、设置是否在.chm中生成源码以供预览

9、设置HTML选项

10、设置Dot选项

11、运行生成.chm文件

12、保存工程文件

五、最终成果效果图

下面看一下我们生成的.chm文件:

以上就是本次的分享,感谢阅读!