protobuf.cpp
为 C++ 语言提供对协议缓冲区的支持。更多信息...
自 | Qbs 1.13 |
属性
详细说明
protobuf.cpp
模块通过使用 protoc 工具,从 proto 定义文件生成 C++ 头文件和源文件。
使用 protobuf 的简单 qbs 文件可以编写如下:
CppApplication { Depends { name: "protobuf.cpp" } files: ["foo.proto", "main.cpp"] }
生成的头文件现在可以包含在 C++ 源文件中
#include <foo.pb.h> int main(int argc, char* argv[]) { Foo bar; bar.set_answer(42); google::protobuf::ShutdownProtobufLibrary(); return 0; }
相关文件标识
标识 | 自动标识的文件名 | 自 | 描述 |
---|---|---|---|
"protobuf.input" | *.proto | 1.13.0 | 带有此标识的文件被认为是 protoc 编译器的输入。 |
"protobuf.grpc" | 1.14.0 | 带有此标识的文件被认为是 gRPC 文件。 | |
"protobuf.hpp" | 1.18.0 | 此标识附加到由 protoc 编译器生成的头文件。 |
依赖关系
protobuf.cpp 模块需要运行时库才能运行。它依赖于可以由 qbspkgconfig 模块提供者创建的 "protobuflib"
模块(相应的软件包是 protobuf
或 protobuf-lite
)。如果设置 useGrpc 为 true,则 protobuf.cpp 模块还依赖于 "grpcpp"
模块(相应的软件包是 gprc++
)。
属性文档
[since Qbs 1.17] 编译器名称 : 字符串 |
protoc 二进制文件名称。
默认值: "protoc"
此属性是在 Qbs 1.17 中引入的。
[since Qbs 1.17] 编译器路径 : 字符串 |
protoc 二进制文件的路径。
使用此属性可以覆盖自动检测的位置。
默认值: 自动检测
此属性是在 Qbs 1.17 中引入的。
导入路径 : 路径列表 |
通过 --proto_path
选项传递给 protoc
工具的导入列表。这些导入应包含 proto 文件。它们用于确定生成文件的相对结构。
注意:路径的顺序与在此属性以及 protoc
中指定的顺序相同,并且 protoc
的输出可能会因该顺序而有所不同。
默认值: []
[只读] 输出目录 : 字符串 |
放置 protoc
编译器生成的文件所在的目录。
此属性的值会自动由 Qbs 设置,用户不能更改。
useGrpc : 布尔值 |
是否使用 gRPC 框架。
使用此属性启用对由Google提供的现代开源高性能RPC框架gRPC的支持。
使用gRPC的简单qbs文件可以写成以下这样:
CppApplication { Depends { name: "protobuf.cpp" } protobuf.cpp.useGrpc: true files: ["main.cpp"] Group { files: "grpc.proto" fileTags: "protobuf.grpc" } }
注意:因为gRPC使用相同的*.proto
文件,而Qbs无法检测是否生成gRPC或protobuf
,所以应手动分配protobuf.grpc
标签。
以下grpc.proto
文件...
syntax = "proto3"; package Qbs; message Request { string name = 1; } message Response { string name = 1; } service Grpc { rpc doWork(Request) returns (Response) {} }
...可以如下在C++源文件中使用:
#include <grpc.grpc.pb.h> class Service final : public Qbs::Grpc::Service { grpc::Status doWork( grpc::ServerContext* context, const Qbs::Request* request, Qbs::Response* reply) override { (void)context; reply->set_name(request->name()); return grpc::Status::OK; } };
默认:false
©2023 The Qt Company Ltd. 本文档中的文档贡献属于其各自所有者的版权。提供的文档遵守由自由软件基金会发布的GNU自由文档许可证第1.3版条款。