gpt4 book ai didi

protocol-buffers - 将 Protocol Buffer 集成到 WAF 中

转载 作者:行者123 更新时间:2023-12-04 12:48:47 26 4
gpt4 key购买 nike

我设法编译了我的 .proto像这样的文件:

def build(bld):
bld(rule='protoc --cpp_out=. -I.. ${SRC}', source='a.proto b.proto', name='genproto')

似乎工作得很好,当我对源文件进行更改时,它们会被重新编译等等。但结果将是名为 build/a.pb.cc 的文件和 build/b.pb.cc我需要将其包含在我的主程序源列表中。当然,我知道如何从我的 Protocol Buffer 文件名中手动构建它们,但我不认为这是要走的路。谁能给我一个提示?

最好的问候,菲利普

更新

在 IRC 人员的耐心帮助下,我能够设法构建一个工具,如下所示。
#!/usr/bin/env python
# encoding: utf-8
# Philipp Bender, 2012

from waflib.Task import Task
from waflib.TaskGen import extension

"""
A simple tool to integrate protocol buffers into your build system.

def configure(conf):
conf.load('compiler_cxx cxx protoc_cxx')

def build(bld):
bld.program(source = "main.cpp file1.proto proto/file2.proto",
target = "executable")

"""

class protoc(Task):
run_str = '${PROTOC} ${SRC} --cpp_out=. -I..'
color = 'BLUE'
ext_out = ['.h', 'pb.cc']

@extension('.proto')
def process_protoc(self, node):
cpp_node = node.change_ext('.pb.cc')
hpp_node = node.change_ext('.pb.h')
self.create_task('protoc', node, [cpp_node, hpp_node])
self.source.append(cpp_node)
self.env.append_value('INCLUDES', ['.'] )

self.use = self.to_list(getattr(self, 'use', '')) + ['PROTOBUF']

def configure(conf):
conf.check_cfg(package="protobuf", uselib_store="PROTOBUF",
args=['--cflags', '--libs'])
conf.find_program('protoc', var='PROTOC')

您还可以在错误跟踪器中找到它:

https://code.google.com/p/waf/issues/detail?id=1184

最佳答案

这种处理记录在 Waf 书中(查找“idl”)。

但是我很确定一个 protobuf 工具会受到社区的欢迎,所以我建议你尝试创建一个并提交它以在错误跟踪器或 IRC 上进行审查。这样,您将有更少的维护负担,更短的 wscript。

我希望使用这样的工具:

bld(
name="protobufs",
features="protoc cxx",
source=["protobuf/a.proto", "protobuf/b.proto"],
includes=["protobuf", "..."],
)

bld(
target="test",
features="cxx cxxprogram",
source="test.cpp",
use="protobufs", # uses the generated C++ code, links to -lprotobuf
)

或类似的东西。

关于protocol-buffers - 将 Protocol Buffer 集成到 WAF 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11274070/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com