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

С уважением, Филипп

ОБНОВЛЕНИЕ

С терпеливой помощью людей из 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

7
задан wal-o-mat 29 July 2012 в 20:28
поделиться