前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Protobuf - 使用scons编译proto文件

Protobuf - 使用scons编译proto文件

作者头像
Aichen
发布2018-06-25 11:02:43
1.1K0
发布2018-06-25 11:02:43
举报
文章被收录于专栏:白驹过隙白驹过隙
代码语言:javascript
复制
 使用protobuf过程中,需要先对消息结构进行定义,文件以.proto格式结尾。然后要使用google提供的protoc命令行,把.proto文件转成对应的代码文件。
 protoc --proto_path=IMPORT_PATH --cpp_out=DST_DIR path/to/file.proto
 这个步骤看起来非常简单,但是在实际项目中,编译过程文件众多,不可能对这个进行单独生成和编译。新的代码文件要保证能随时更新引入。
 最后通过scons,研究了会builder,自己定义了protobuf的编译规则。在每次执行项目编译时,均会对.proto格式的文件进行代码生成,引入项目进行编译。
  
 下面附上编译脚本,适用于大多复杂项目:
  1 #!/usr/bin/python   
2 # -*- coding: UTF-8 -*-   
3   
4 import os  
5   
6 #--------------protobuf-------------------  
7 #proto file path  
8 SRC_DIR = ARGUMENTS.get("SRC_DIR","./")  
9 DST_DIR = ARGUMENTS.get("DST_DIR","./") 
10  
11 #construct proto 
12 PROTOC = Builder(action="protoc -I=" + SRC_DIR + " --cpp_out=" + DST_DIR + " " + SRC_DIR + "$SOURCES",src_surffix=".proto") 
13 ENV_PB = Environment(BUILDERS={'Protoc':PROTOC}) 
14 PROTOFILE = Glob('*.proto') 
15 CCFILE = Glob('*.cc') 
16 ENV_PB.Protoc(PROTOFILE) 
17  
18 #--------------cpp------------------- 
19 ENV_CPP = Environment(CC = 'g++') 
20  
21 #compile info 
22 TARGETNAME = 'Server' 
23 LIB = Split('pthread jsoncpp protobuf amqpcpp') 
24 FILELIST = Glob('*.cpp') 
25 FILELIST = FILELIST + CCFILE 
26 HEADFILEPATH = Split('../Thrid ../Common') 
27 LIB_DIR = Split('../Thrid/lib') 
28 FLAGS = Split('-std=c++11 -Wall -g -D _DEBUG') 
29  
30 #Program target 
31 TARGETFILE = ENV_CPP.Program(target = TARGETNAME,source = FILELIST,LIBS = LIB,CPPPATH = HEADFILEPATH,LIBPATH = LIB_DIR,CCFLAGS = FLAGS) 
32  
33 #install 
34 INSTALL = ENV_CPP.Install('../bin', TARGETFILE) 
35 ENV_CPP.Alias('install',INSTALL)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-07-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档