1、获取protobuf及相关依赖
新建install_protobuf.bat脚本,粘贴以下代码
::参考文章 https://github.com/google/protobuf/blob/master/cmake/README.md ::默认当前操作系统已安装 git 和 cmake,并配置好了环境变量 echo off & color 0A ::设置所需要的Protobuf版本,最新版本可以在github上查到 https://github.com/google/protobuf set PROTOBUF_VESION="v3.3.0" echo %PROTOBUF_VESION% set PROTOBUF_PATH="protobuf_%PROTOBUF_VESION%" echo %PROTOBUF_PATH% ::从githug上拉取protobuf源代码 git clone -b %PROTOBUF_VESION% https://github.com/google/protobuf.git %PROTOBUF_PATH% ::从github上拉取gmock cd %PROTOBUF_PATH% git clone -b release-1.7.0 https://github.com/google/googlemock.git gmock ::从github上拉取gtest cd gmock git clone -b release-1.7.0 https://github.com/google/googletest.git gtest pause
2、编译
新建build_protobuf.bat脚本,粘贴以下代码
::参考文章 https://github.com/google/protobuf/blob/master/cmake/README.md ::默认当前操作系统已安装 git 和 cmake,并配置好了环境变量 echo off & color 0A ::设置所需要的Protobuf版本,最新版本可以在github上查到 https://github.com/google/protobuf ::必须与下载的版本一致 set PROTOBUF_VESION="v3.3.0" echo %PROTOBUF_VESION% set PROTOBUF_PATH="protobuf_%PROTOBUF_VESION%" echo %PROTOBUF_PATH% cd %PROTOBUF_PATH% ::设置VS工具集,相当于指定VS版本,取决于VS的安装路径 set VS_DEV_CMD="D:Program Files (x86)Microsoft Visual Studio 12.0Common7ToolsVsDevCmd.bat" ::设置工程文件夹名字,用来区分不同的VS版本 set BUILD_PATH="build_vs2013" ::设置编译版本 Debug Or Release set MODE="Release" cd cmake if not exist %BUILD_PATH% md %BUILD_PATH% cd %BUILD_PATH% if not exist %MODE% md %MODE% cd %MODE% ::开始构建和编译 call %VS_DEV_CMD% cmake ../../ -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=%MODE% call extract_includes.bat nmake /f Makefile echo %cd% pause
编译完成,我们得到protobuf可执行文件
3、下面我们来编写proto
// 指定语法规则 proto2 or proto3,不写的话会有警告,默认使用proto2语法规则 syntax = "proto2"; enum MSGID_XXXSERVER // 定义消息ID { MSGID_CS_REQ_Login = 0x0100; MSGID_CS_RESP_Login = 0x0200; MSGID_CS_NOTI_Login = 0x0300; } message LoginReq // 登录请求 { optional int32 roleID = 1; optional string usrName = 2; optional int32 passWd = 3; } message LoginResp // 登录响应 { optional int32 roleID = 1; optional int32 errCode = 2; optional RoleInfo roleInfo = 3; } message LoginNoti //登录通知 { optional int32 roleID = 1; optional RoleInfo roleInfo = 2; }
message RoleInfo // 角色信息 { optional int32 roleID = 1; optional string name = 2; optional int32 age = 3; optional int32 sex = 4; }
4、根据proto生成c++代码
新建gen.bat脚本,粘贴以下代码
@echo off & color 0A :: protoc程序名 set "PROTOC_EXE=protobuf_v3.3.0cmakeuild_vs2013Releaseprotoc.exe" :: .proto文件名 set "PROTOC_FILE_NAME=test.proto" set "PROTOC_PATH=%cd%" set "CPP_OUT_PATH=%cd%" ::生成.h和.cc "%PROTOC_PATH%\%PROTOC_EXE%" --proto_path="%PROTOC_PATH%" --cpp_out="%CPP_OUT_PATH%" "%PROTOC_PATH%\%PROTOC_FILE_NAME%" pause
我们得到下面两个c++文件
5、定义消息管理类,根据MSGID分发消息
6、如客户端服务器使用不同语言,可以生成相应语言的protobuf