Protobuf - 使用scons编译proto文件
2016-07-26 18:15
441 查看
使用protobuf过程中,需要先对消息结构进行定义,文件以.proto格式结尾。然后要使用google提供的protoc命令行,把.proto文件转成对应的代码文件。
protoc --proto_path=IMPORT_PATH --cpp_out=DST_DIR path/to/file.proto
这个步骤看起来非常简单,但是在实际项目中,编译过程文件众多,不可能对这个进行单独生成和编译。新的代码文件要保证能随时更新引入。
最后通过scons,研究了会builder,自己定义了protobuf的编译规则。在每次执行项目编译时,均会对.proto格式的文件进行代码生成,引入项目进行编译。
下面附上编译脚本,适用于大多复杂项目:
#!/usr/bin/python # -*- coding: UTF-8 -*- import os #--------------protobuf------------------- #proto file path SRC_DIR = ARGUMENTS.get("SRC_DIR","./") DST_DIR = ARGUMENTS.get("DST_DIR","./") #construct proto PROTOC = Builder(action="protoc -I=" + SRC_DIR + " --cpp_out=" + DST_DIR + " " + SRC_DIR + "$SOURCES",src_surffix=".proto") ENV_PB = Environment(BUILDERS={'Protoc':PROTOC}) PROTOFILE = Glob('*.proto') CCFILE = Glob('*.cc') ENV_PB.Protoc(PROTOFILE) #--------------cpp------------------- ENV_CPP = Environment(CC = 'g++') #compile info TARGETNAME = 'Server' LIB = Split('pthread jsoncpp protobuf amqpcpp') FILELIST = Glob('*.cpp') FILELIST = FILELIST + CCFILE HEADFILEPATH = Split('../Thrid ../Common') LIB_DIR = Split('../Thrid/lib') FLAGS = Split('-std=c++11 -Wall -g -D _DEBUG') #Program target TARGETFILE = ENV_CPP.Program(target = TARGETNAME,source = FILELIST,LIBS = LIB,CPPPATH = HEADFILEPATH,LIBPATH = LIB_DIR,CCFLAGS = FLAGS) #install INSTALL = ENV_CPP.Install('../bin', TARGETFILE) ENV_CPP.Alias('install',INSTALL)
相关文章推荐
- java中数字基本运算、金额运算精度问题小结
- js正则表达式test方法的问题
- CentOS中实现与Ubuntu下apt-get install build-essential功能类似的命令
- redis扩展的用法
- mysql数据库常用语句
- 如何提高代码能力
- hdu 5762 Teacher Bo 暴力
- (13)网页布局剖析与制作(上)
- springmvc+mybatis高效接口编程
- 71.You configured the Flash Recovery Area for your database. The database instance has been started
- AFNetworiking与ASIHttpRequest对比
- HDU1551:Cable master(二分)
- Quartz定时任务简单实现
- OSG中抓取屏幕保存为图片
- 各种学习型网站
- phpstorm+Xdebug断点调试PHP
- hdu5738组合计数,极角排序
- linux 下无法shutdown.sh Tomcat的解决办法
- OC多线程的理解
- 深入剖析 JavaScript 的深复制