zoukankan      html  css  js  c++  java
  • Protobuf

    使用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)
  • 相关阅读:
    LeetCode 260
    LeetCode 258
    LeetCode 237
    LeetCode 226
    LeetCode 203
    LeetCode 202
    codeforces 7D
    codefroces 7C
    codeforces 7B
    codeforces 6E (非原创)
  • 原文地址:https://www.cnblogs.com/binchen-china/p/5708494.html
Copyright © 2011-2022 走看看