8

私は次の.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

4

1 に答える 1

3

この種の処理については、Waf ブック (「idl」を探してください) に記載されています。

しかし、protobuf ツールがコミュニティに歓迎されることは間違いありません。そのため、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
)

またはそのようなもの。

于 2012-07-03T23:11:47.287 に答える