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 ...
#grpc框架命令 -- 如果不使用grpc可以省略
protoc -I=${SRC_DIR} --grpc_out=${DST_DIR} --plugin=protoc-gen-grpc=`which grpc_cpp_plugin` ${SRC_DIR}/*.prot
#protobuf命令
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