1. 下载cmake并安装, cmake的版本可选最新版

1.1官网链接:https://cmake.org/download/

打开官网链接:下拉找到如下图所示的地方
我下载的是第二个window ×64 zip的, 这个解压即可以使用,不用安装,第一个需要安装,大家需要哪个用哪个吧,都行
我个人使用的版本:CMake 3.21.1下面是我的网盘链接
链接:https://pan.baidu.com/s/1PaVhE9Ekt7Uf5y0ITQ1kMw
提取码:1111
在这里插入图片描述

1.2下载完成后解压进入软件的bin目录,双击cmake hui.exe,能打开即可

在这里插入图片描述
要注意的是,解压的路径中不能有中文路径,否则后面会出现莫名的错误
在这里插入图片描述

2. 下载protobuf的源码:https://github.com/google/protobuf/releases

这个网站需要访问外网,里面有一系列版本和不同语言的源码,我这里用的是C++的,不建议使用最新版本,容易出bug, 点击蓝色所对应的文件,即可下载
在这里插入图片描述
如果不能访问外网或者访问速度过慢或者出现问题,可以下载我使用的版本, 我使用的是3.15.0版本的,我的网盘链接如下
链接:https://pan.baidu.com/s/14Sm8EIS-Az7coP48xVPjUA
提取码:1111
可以在D盘建立一个文件夹,解压到该文件夹中中,我的文件夹名是protobuf_vision
在该文件夹中在建立一个output文件夹,用于存储编译protobuf产生的文件
也要注意的是,解压的路径中不能有中文路径,否则后面会出现莫名的错误
在这里插入图片描述

前期工作准备完成,正式开始撸了

3,打开CMake这个软件

在这里插入图片描述

1.点击浏览资源,进入我们下载的源码目录,cmake, 点击选择文件夹

在这里插入图片描述

在这里插入图片描述

3.点击browse build,也就是我们编译后产生文件的地方,进入我们前面建立的文件夹output, 点击选择文件夹,因为我编译过了,所以里面已经有文件了,没有编译过是空的文件夹

在这里插入图片描述

4.点击configure, 配置

在这里插入图片描述

5.然后选择Mingw makefiles, 如下图

在这里插入图片描述

6.点击finish, 完成配置后,如下图

在这里插入图片描述
如果点击finish后出现这些错误提示的
在这里插入图片描述
在这里插入图片描述
解决方案在我的另一篇文章里
cmake配置Qt的protobuf环境时出现Error in configuration process, project files may be invalid解决办法

7. 把一些√√去掉或者加上去,如下图所示

在这里插入图片描述

8. √选Advanced,在下面的地方加上-std=gnu++11, 如图所示

在这里插入图片描述

9. 点击generate, 产生要编译的文件

在这里插入图片描述

如下图,代表成功了

在这里插入图片描述

10. 我们去文件夹output查看我们产生的文件,下图是我已经编译过的,文件比没有编译过的要多得多,你们过了步骤12后,也会产生那么多文件的,先别管那么多,继续下一步先

在这里插入图片描述

11. 在output文件目录下按住shift然后鼠标右键弹出右键菜单,选择在此处打开Powershell窗口,打开后如图所示

在这里插入图片描述

12.我们输入命令mingw32-make,回车

12.1 如果出现这种提示的,就需要添加Qt mingw32的环境变量了,我们要知道Qt的安装位置, 复制地址即可在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
如果是出现这种提示的
在这里插入图片描述
将Qt安装目录Tools\mingw730_32\bin添加到环境变量中即可
在这里插入图片描述

12.2 添加好环境变量后,进行上述步骤,回车然后就会进行编译,会有编译进度显示和一大堆的编译信息

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
我的这里编译出了点问题,到93%就停了,不过没事,经我测试,不影响后序的使用,没出问题当然是最好的
在这里插入图片描述
会发现产生了一大堆的文件,最重要的是protoc.exe这个文件,这是我们编译.proto的必备文件
v

13. 在这里新建一个protobuild.bat的文件,文件内容如下为protoc --cpp_out=./ %1%

在这里插入图片描述
在这里插入图片描述

14. 我们进入cmd命令行,然后切换进output目录后,输入命令,protobuild 要编译的文件,或者直接输入protoc --cpp_out=./ 要编译的文件, 也就是在当前目录下生成编译好的文件在这里插入图片描述

我这里使用的是bike.proto文件,文件内容如下

syntax = "proto2";

package tutorial;

message mobile_request
{
    required string mobile = 1;
}

message mobile_response
{
    required int32 code   = 1;   //响应代号
    required int32 icode  = 2;   //验证码
    optional string data  = 3;   //失败原因
}


message login_request
{
    required string mobile  = 1;    // 手机号码
    required int32  icode   = 2;    // 验证码
}


message login_response
{
    required int32   code   = 1;    // 响应代号
    optional string  desc   = 2;    // 验证码
}

message recharge_request
{
    required string mobile  = 1;    // 手机号码
    required int32  amount  = 2;    // 充值金额
}


message recharge_response
{
    required int32   code   = 1;    // 响应代号
    optional string  desc   = 2;    // 验证码
    required int32  balance = 3;    // 最新的余额
}

message account_balance_request
{
    required string mobile = 1;
}

message account_balance_response
{
    required int32   code   = 1;    // 响应代号
    optional string  desc   = 2;    // 验证码
    required int32  balance = 3;
}

message list_account_records_request
{
    required string mobile = 1;
}

message list_account_records_response
{
    required int32   code   = 1;    // 响应代号
    optional string  desc   = 2;    // 验证码
    message account_record
    {
        required int32  type      = 1; // 0 : 骑行消费,  1 : 充值, 2 : 退款
        required int32  limit     = 2; // 消费或者充值金额
        required uint64 timestamp = 3; // 记录发生时的时间戳
    }

    repeated account_record records = 3;
}

message list_travel_records_request
{
    required string mobile = 1;
}

message list_travel_records_response
{
    required int32   code   = 1;    // 响应代号
    optional string  desc   = 2;    // 验证码
    message travel_record
    {
        required uint64 stm      = 1;   // start timestamp
        required uint32 duration = 2;   // 骑行时长
        required uint32 amount   = 3;   // 所耗金额
    }

    required double              mileage   = 3; // 里程
    required double              discharge = 4; // 排放
    required double              calorie   = 5; // 卡路里
    repeated travel_record       records   = 6;
}

当前目录生成编译好的文件如下图所示
在这里插入图片描述

15. 打开Qt, 建立一个项目,添加我们生成的pb.ccpb.h文件,编译后此时我们会发现存在一大堆的问题,报错,怎么办呢,我们来接着下一步

在这里插入图片描述

16. 我们进入项目的.pro文件,在如下位置加入protobuf的路径和链接库位置

我的路径是:

INCLUDEPATH += D:\protobuf_vision\protobuf-3.15.0\src

LIBS += -LD:\protobuf_vision\output -lprotobuf

在这里插入图片描述

  1. 再次进行编译,发现报错全部没有了,ok, 完成啦, 写文章不容易,对你有帮助的点赞或收藏在走哦
    -------------毕设遇到的坎-写于2021-10-08 半夜0:28
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐