4
我设法编译我.proto
文件是这样的:整合协议缓冲区到WAF
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
。我当然知道如何手动构建它们从我的协议缓冲区的文件名,但我不认为这是一段路要走。任何人都可以提供给我一个提示吗?
最好的问候,菲利普
UPDATE
与患者的帮助下从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
谢谢你的建议,我想我会来挖成。 –