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

Protobuf - 使用scons编译proto文件

作者头像
Aichen
发布于 2018-06-25 03:02:43
发布于 2018-06-25 03:02:43
1.1K00
代码可运行
举报
文章被收录于专栏:白驹过隙白驹过隙
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 使用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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
通讯协议序列化解读(一) Protobuf详解教程
前言:说到JSON可能大家很熟悉,是目前应用最广泛的一种序列化格式,它使用起来简单方便,而且拥有超高的可读性。但是在越来越多的应用场景里,JSON冗长的缺点导致它并不是一种最优的选择。 一、常用序列化格式介绍 目前JAVA常用的序列化有protobuf,json,xml,Serializable,hessian,kryo。他们的优缺点如下: JSON:不多说了,用途广泛,序列化方式还衍生了阿里的fastjson,美团的MSON,谷歌的GSON等更加优秀的转码工具。 优点:使用方便。 缺点:数据冗长,转码性
生活创客
2018/06/11
1.8K3
【Protobuf协议】004-定义服务(Service)、JSPN映射、选项、生成访问类
如果想要将消息类型用在RPC(远程方法调用)系统中,可以在.proto文件中定义一个RPC服务接口,protocol buffer编译器将会根据所选择的不同语言生成服务接口代码及存根。如,想要定义一个RPC服务并具有一个方法,该方法能够接收 SearchRequest并返回一个SearchResponse,此时可以在.proto文件中进行如下定义:
訾博ZiBo
2025/01/06
1210
protoBuf-python学习笔记
protobuf通过定义包含类型结构序列化信息的文件(.proto文件),来编译生成不同语言平台的高效序列化程序代码
歪歪梯
2020/08/12
1.4K0
深入protobuf(Protocol Buffers)原理:简化你的数据序列化
Protocol buffers 是⼀种语⾔中⽴,平台⽆关,可扩展的序列化数据的格式,可⽤于通信协议,数据存储 等。Protocol buffers 在序列化数据具有灵活、⾼效的特点。
Lion Long
2024/11/04
2.9K0
深入protobuf(Protocol Buffers)原理:简化你的数据序列化
【C++】开源:数据序列化库protobuf配置与使用
Protocol buffer是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。是谷歌的开源数据交换格式。
DevFrank
2024/07/24
7500
Protobuf协议?盘他!
Protobuf是Google基于C++ 进行的实现的一套数据序列化/反序列化库,开发人员可以根据 ProtoBuf 的语言规范生成多种编程语言(C++、Python、Java 等)的接口代码。使用ProtoBuf的文件在存储效率上和处理性能上都元高于XML,也具有更好的跨平台性,使用灵活。
audy
2019/04/28
1.4K0
Protobuf协议?盘他!
Protobuf语言指南
Protobuf是Protocol Buffers的简称,它是Google公司开发的一种数据描述语言,用于描述一种轻便高效的结构化数据存储格式,并于2008年对外开源。Protobuf可以用于结构化数据串行化,或者说序列化。它的设计非常适用于在网络通讯中的数据载体,很适合做数据存储或 RPC 数据交换格式,它序列化出来的数据量少再加上以 K-V 的方式来存储数据,对消息的版本兼容性非常强,可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。开发者可以通过Protobuf附带的工具生成代码并实现将结构化数据序列化的功能。
KevinYan
2019/10/13
2.2K0
数据传输 之 PB协议(protocol buffer)是什么?怎么写?如何编译?
ProtocolBuffer是用于序列化结构数据的灵活、高效、自动的方法,有如XML,不过它更小、更快、也更简单。一旦定义了你自己的数据结构,然后就可以使用特殊生成的源代码轻松的在各种数据流和使用的各种高级语言之间读写你的结构化数据。你甚至可以在不破坏根据“旧”格式编译的已部署程序的情况下更新你的数据结构。
看、未来
2021/09/18
3.9K0
SCons - 简单而强大的项目编译脚本
N年前学的makefile,当时还勉强能写一些简单的工程编译,现在已经基本忘了。makefile确实编写复杂,而且平时也不是经常使用,容易忘记。偶识了scons,一切都变的简单了。最近研究了下scons,原来需要上百行的makefile编译过程,现在只需要十行不到,而且没有makefile那些繁杂的结构语法,完全使用python语言就可以进行编译脚本编写,非常好记忆和编译一些大的工程。 直接使用apt-get install scons命令就可以完成安装,需要python环境。 Scons命令
Aichen
2018/05/18
2.7K0
Protocol Buffer简介及Android Studio的配置
Protocol Buffer 和 XML、JSON一样都是结构数据序列化的工具,用来实现数据的传递、转换等功能。
蜻蜓队长
2020/11/13
1K0
Protocol Buffer简介及Android Studio的配置
Protobuf
Protocol buffers are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data – think XML, but smaller, faster, and simpler. You define how you want your data to be structured once, then you can use special generated source code to easily write and read your structured data to and from a variety of data streams and using a variety of languages.
vanguard
2020/03/09
1.2K0
python调用动态链接库传送protobuf
   protobuf是Google提供的一个开源序列化框架,类似于XML,JSON这样的数据表示语言,其最大的特点是基于二进制,因此比传统的XML表示高效短小得多。开发者定义类似于结构体的message,通过protobuf的工具将定义好的格式传送给protobuf的接收工具,接收工具会自动产生类,需要传输的时候直接导入这个类,将关键字段填充,通过序列化函数,将其序列化,接收端将其反序列化,实现数据传输。protobuf支持c++,java,python。详细信息见参考文档。
py3study
2020/01/09
1.5K0
搞定Protocol Buffers (上)- 使用篇
因为工作中gRPC使用非常频繁,而gRPC的默认序列化编码采用的也是Protocol Buffers。业界也盛传其效率及其高效:
用户3904122
2022/06/29
4.9K0
搞定Protocol Buffers (上)- 使用篇
Protocol Buffers - PB协议概述
� ProtocolBuffers-Google'sdatainterchangeformat
张云飞Vir
2020/03/16
3.2K0
基于google protobuf的gRPC实现
Protobuf(Google Protocol Buffers)提供一种灵活、高效、自动化的机制,用于序列化结构数据。Protobuf仅需自定义一次所需要的数据格式,然后我们就可以使用Protobuf编译器自动生成各种语言的源码,方便我们读写自定义的格式化数据。另外Protobuf的使用与平台和语言无关,可以在不破坏原数据格式的基础上,扩展新的数据。
小一
2019/08/14
1.4K0
基于google protobuf的gRPC实现
protobuf篇:介绍、安装、官方教程翻译、测试
综上所述目前最好的设计消息数据包方式是服务器和客户端通信协议推荐用protobuf,服务器存入数据库时用json。
看、未来
2021/10/28
1.6K0
protobuf篇:介绍、安装、官方教程翻译、测试
Go每日一库之94:protobuf
protobuf 即 Protocol Buffers,是一种轻便高效的结构化数据存储格式,与语言、平台无关,可扩展可序列化。protobuf 性能和效率大幅度优于 JSON、XML 等其他的结构化数据格式。protobuf 是以二进制方式存储的,占用空间小,但也带来了可读性差的缺点。protobuf 在通信协议和数据存储等领域应用广泛。例如著名的分布式缓存工具 Memcached 的 Go 语言版本groupcache 就使用了 protobuf 作为其 RPC 数据格式。
luckpunk
2023/09/30
6700
【ProtoBuf】文件编写及序列化
为了快速上手以及完整的使用ProtoBuf,我们将编写一个小项目,并根据PB学习程度对这个项目来逐渐改版,每一个版本对应PB的新知识点。在后续内容中,会使用简单的通讯录作为项目实现。
用户11029129
2025/02/18
1460
【ProtoBuf】文件编写及序列化
Python Google Protocol Buffer
本篇主要介绍如何在Python语言中使用Google Protocol Buffer(后续都简写为PB), 包括以下几个部分:
职场亮哥
2020/10/10
1.6K0
Protobuffer 官方文档学习
该文件的第一行指定您使用的是proto3语法:如果不这样做,协议缓冲区编译器将假定您正在使用proto2。 这必须是文件的第一个非空,非注释行。
solate
2019/07/19
8.1K0
推荐阅读
相关推荐
通讯协议序列化解读(一) Protobuf详解教程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文