使用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)
相关文章
- 使用国人的koala来重新预编译BOOTSTRAP的LESS文件
- 使用maven-compiler-plugin插件,在pom文件设置默认的jdk编译版本(以JDK1.8为例)
- protobuf 编译 java js文件详解
- 使用gcc编译源文件时,-L、-l和-I的介绍和使用方法
- Java使用JNA调用Golang编译生成的动态库(dll 和 so 文件)
- 使用Go编译为可执行文件(windows/linux)
- sass文件编译(.scss->.css),使用ruby环境,在windows10,koala工具,Error: Invalid GBK character "\xE5"
- 微信小程序逆向 小程序包使用unveilr工具解包后在开发者工具报[ WXML 文件编译错误] Unexpected token `}`
- Android P系统编译之使用PRODUCT_COPY_FILES拷贝文件或文件夹
- 使用GraalVM将SpringBoot工程编译成平台原生的可执行文件