Protobuf - 使用scons编译proto文件

 使用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)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据学习笔记

Ansible常用模块介绍

1、 ansible-doc 希望知道更加详细的module的信息,最好的方法是使用ansible自带的ansible-doc的-s选项 [root@node1...

4595
来自专栏JadePeng的技术博客

Docker+Jenkins持续集成环境(3)集成PMD、FindBugs、Checkstyle静态代码检查工具并邮件发送检查结果

为了规范代码,我们一般会集成静态代码检测工具,比如PMD、FindBugs、Checkstyle,那么Jenkins如何集成这些检查工具,并把检查结果放到构建邮...

5293
来自专栏xiaoheike

storm集群部署

机子配置信息 操作系统:CentOS release 6.5 (Final) cpu:Intel(R) Xeon(R) CPU E5-2630 v2 @ 2...

2522
来自专栏java思维导图

教你十分钟构建好 SpringBoot + SSM 框架

目前最主流的 java web 框架应该是 SSM,而 SSM 框架由于更轻便与灵活目前受到了许多人的青睐。而 SpringBoot 的轻量化,简化项目配置, ...

1444
来自专栏阿杜的世界

Spring+Velocity+Mybatis整合笔记(step by step)

开发过程中使用的操作系统是OS X,关于软件安装的问题请大家移步高效的Mac环境设置。 本文是我对自己学习过程的一个回顾,应该还有不少问题待改进,例如目录的设...

1401
来自专栏ytkah

景安服务器备份完硬盘脱机怎么处理

  景安快云服务器管理平台创建备份后有时可能导致硬盘脱机,这个要如何处理呢?几行命令就可以搞定!使用DISKPART.exe命令 解除策略 1.运行:cmd 2...

3595
来自专栏owent

注册表常用键值意义

[HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Control Panel]

1652
来自专栏白驹过隙

Protobuf - 使用scons编译proto文件

45916
来自专栏bboysoul

开源堡垒机jumpserver搭建

之前说了国产良心kodexplorer,今天再说一个国内比较好的开源项目jumpserver,除此之外还可以的国内开源项目我觉得就是宝塔面板了。废话不多说上教程...

7923
来自专栏恰童鞋骚年

.NET Core微服务之服务间的调用方式(REST and RPC)

  微服务之间的接口调用通常包含两个部分,序列化和通信协议。常见的序列化协议包括json、xml、hession、protobuf、thrift、text、by...

2496

扫码关注云+社区

领取腾讯云代金券