protobuf.cpp QML Type

Provides support for protocol buffers for the C++ language. More...

Import Statement: import QbsModules .
Since: Qbs 1.13

Properties

Detailed Description

The protobuf.cpp module provides support for generating C++ headers and sources from proto definition files using the protoc tool.

A simple qbs file that uses protobuf can be written as follows:


  CppApplication {
      Depends { name: "protobuf.cpp" }
      files: ["foo.proto", "main.cpp"]
  }

A generated header now can be included in the C++ sources:


  #include <foo.pb.h>

  int main(int argc, char* argv[]) {
      Foo bar;
      bar.set_answer(42);
      google::protobuf::ShutdownProtobufLibrary();
      return 0;
  }

Relevant File Tags

TagAuto-tagged File NamesSinceDescription
"protobuf.input"*.proto1.13.0Source files with this tag are considered inputs to the protoc compiler.
"protobuf.grpc"1.14.0Source files with this tag are considered as gRPC files.

Property Documentation

grpcIncludePath : string

The path where grpc++ headers are located. Set this property to override the default location.

Default: auto-detected


grpcLibraryPath : string

The path where the grpc++ library is located. Set this property to override the default location.

Default: auto-detected


importPaths : pathList

The list of imports that are passed to the protoc tool via the --proto_path option. These imports should contain the proto files. They are used to determine the relative structure of the generated files.

Note: The paths are passed to protoc in the same order as specified in this property and protoc output may differ depending on that order.

Default: []


includePath : string

The path where protobuf C++ headers are located. Set this property to override the default location.

Default: auto-detected


libraryPath : string

The path where the protobuf C++ library is located. Set this property to override the default location.

Default: auto-detected


protocBinary : string

The command to invoke when compiling proto definition files.

Default: auto-detected


useGrpc : bool

Whether to use gRPC framework.

Use this property to enable support for the modern open source high performance RPC framework by Google, gRPC (https://www.grpc.io).

A simple qbs file that uses grpc can be written as follows:


  CppApplication {
      Depends { name: "protobuf.cpp" }
      protobuf.cpp.useGrpc: true
      files: ["main.cpp"]
      Group {
          files: "grpc.proto"
          fileTags: "protobuf.grpc"
      }
  }

Note: that protobuf.grpc tag should be assigned manually because gRPC uses same *.proto files and Qbs can't detect whether to generate gRPC or protobuf.

The following grpc.proto file...


  syntax = "proto3";

  package Qbs;

  message Request {
      string name = 1;
  }

  message Response {
      string name = 1;
  }

  service Grpc {
      rpc doWork(Request) returns (Response) {}
  }

...can be used in the C++ sources as follows:


  #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;
      }
  };

Default: false