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"*.proto1.13.0带有此标识的文件被认为是 protoc 编译器的输入。
"protobuf.grpc"1.14.0带有此标识的文件被认为是 gRPC 文件。
"protobuf.hpp"1.18.0此标识附加到由 protoc 编译器生成的头文件。

依赖关系

protobuf.cpp 模块需要运行时库才能运行。它依赖于可以由 qbspkgconfig 模块提供者创建的 "protobuflib" 模块(相应的软件包是 protobufprotobuf-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版条款。