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

标签 protocol-buffers waf

我设法编译了我的 .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/

相关文章:

python - 如何安装 node-waf?

将项目交叉编译为带有 ARM9 的 waf 的 buildroot 包

protocol-buffers - Protocol Buffer : does changing field name break the message?

go - 在 protobuf 的 .proto 文件中将 golang 类型定义为其他类型的一部分

linux - 如何在 unix 中使用 protobuf-csharp-port

python - google.api_core.exceptions.Unknown : None There was a problem opening the stream. 尝试打开 DEBUG 级别日志以查看错误

c++ - waf 找不到现有库

java - 使用 protobuf for java 时使用 gradle 重复处理策略错误

c++ - 如何特别为特定模块指定 gcc 标志 (CXXFLAGS)?

c++ - 将 NS3 返回/退出代码(通过 waf)捕获为 Bash 脚本中的变量