2012-06-30 3 views
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, которые мне нужно включить в список исходных файлов основных программ. Конечно, я знаю, как вручную создавать их из имен файлов протоколов, но я не думаю, что это путь. Может ли кто-нибудь дать мне подсказку?

С наилучшими пожеланиями, Philipp

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

ответ

1

Этот вид обработки описан в книге 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 
) 

Или что-то подобное.

+0

Благодарим вас за предложение, я думаю, что я в этом поработаю. –

Смежные вопросы