Sword protobuf学习二

编写protobuf消息文件

文件格式: xxx.proto

//标明使用哪个版本的protobuf,默认2.0版本
syntax = "proto3";

//类似于c++中的namespace
package commun;

//message类首字母需要大写,message类中所有的成员属性最好全部小写,因为在赋值时,protobuf提供的方法名字全部是小写的
message Say{
    //字段规则移除了"required",并把"optional"改名为"singular";
    //singular修饰表示该字段可以有0个或1个值(不超过1个),即可写也可以不写 
    int32 code = 1;
    string data = 2;
    //定义一个数组,数组元素是string类型 repeated关键字是用来定义一个数组的
    repeated string name = 3;
    //定义map
    map<int32, string> projects = 4;
    //定义字符数组,用来存二进制文件数据
    bytes audio = 5;
    //定义一个变量,来存储文件的长度,filesize与audio这个变量紧密相关
     int32 filesize = 6;
}

protobuf生成对应语言文件的脚本如下

#!/bin/bash

SRC_DIR=.
DST_DIR=.

#build protobuf
#protoc选项
#--proto_path=SRC_DIR
#SRC_DIR声明了一个.proto文件所在的解析import具体目录。如果忽略该值,则使用当前目录。
#如果有多个目录则可以多次调用--proto_path,它们将会顺序的被访问并执行导入。-I=IMPORT_PATH是--proto_path的简化形式。
#-I主要是用在proto文件中有import关键字的场景下,没有import关键字可以不用-I

#不同目录下的多文件编译
#protoc -I=${SRC_DIR} --cpp_out=$DST_DIR 文件目录1 文件目录2 文件目录3 ...

protoc -I=${SRC_DIR} --cpp_out=$DST_DIR $SRC_DIR/*.proto

mv ./*.h ../include

#修改文件名,个人喜好cpp结尾
for name in `ls $DST_DIR/*.cc`
do
    mv $name ${name/[.]cc/.cpp}
done

mv ./*.cpp ../src

猜你喜欢

转载自www.cnblogs.com/zhanggaofeng/p/9689553.html