刚刚学习如何使用 Meson 并希望为多种语言生成 protobuf 源/头文件 - C++、Python、Java、Javascript。meson.build
使用我文件中的生成器函数,C++ 非常简单:
project('MesonProtobufExample', 'cpp')
protoc = find_program('protoc', required : true)
deps = dependency('protobuf', required : true)
gen = generator(protoc, \
output : ['@BASENAME@.pb.cc', '@BASENAME@.pb.h'],
arguments : ['--proto_path=@CURRENT_SOURCE_DIR@', '--cpp_out=@BUILD_DIR@', '@INPUT@'])
generated = gen.process('MyExample.proto')
ex = executable('my_example', 'my_example.cpp', generated, dependencies : deps)
这会产生MyExample.pb.cc
和MyExample.pb.h
文件。我认为 Python 会同样简单,但我有点难过,因为我的 Python 脚本没有 executable() 步骤,因为它不需要编译。我注意到介子(事实证明是 CMake)在调用 executable() 之前实际上不会生成 protobuf 文件,所以我不能跳过这一步,否则MyExample_pb2.py
将不会生成文件。经过几个小时的搜索,我没有找到一起使用 meson/python/GPB 的示例。不应该有一种简单的方法来像 CMake 那样将生成的源“链接”到 python 文件/模块吗?
protobuf_generate_python(PROTO_PY MyExample.proto)
# This command causes the protobuf python binding to be generated
add_custom_target(my_example.py ALL DEPENDS ${PROTO_PY})