qt_add_grpc

Protobuf スキーマを使用して Qt ベースの C++ サービスを生成します。

このコマンドは Qt 6.5 で導入されました。

通常、qtgrpcgenqt_add_grpc CMake マクロを通して呼び出されます。

qt_add_grpc(<target> <CLIENT|SERVER>
    PROTO_FILES <file> ...
    [PROTO_INCLUDES <path> ...]
    [QML]
    [OUTPUT_DIRECTORY <dir>]
    [GENERATE_PACKAGE_SUBFOLDERS]
    [COPY_COMMENTS]
    [EXPORT_MACRO <infix>]
    [OUTPUT_HEADERS <var>]
    [OUTPUT_TARGETS <var>]
    [HEADER_GUARD <pragma|filename>]
)

注意: 現在、CLIENT コード生成のみがサポートされています。

ソース・ファイルはqtgrpcgen によって作成され、ターゲットに追加されます。ターゲットがすでに存在する場合、ファイルはターゲット・ソース・リストに追加されます。ターゲットが存在しない場合は、ライブラリとして作成され、リンクする必要があります。

リンク先の gRPCqt_add_grpc コマンドを使用して生成されるライブラリは、サービス・コールで使用されるprotobufシンボルを参照します。つまり、qt_add_protobufと qt_add_grpcの両方の呼び出しで共通のターゲットを使用するか、生成されたprotobufライブラリをgRPC

上記の記述を考慮すると、protobufとgRPC クライアントコードの両方でターゲットを再利用することができます:

# Generate the protobuf types first
qt_add_protobuf(test_service_client
    PROTO_FILES
        test_service.protobuf
)
...
# Reuse the protobuf target and extend it with \gRPC client
# functionality
qt_add_grpc(test_service_client CLIENT
    PROTO_FILES
        test_service.protobuf
)

ターゲットを別々にしたい場合は、gRPC クライアントターゲットを protobuf ターゲットにリンクする必要があります:

# Generate the protobuf types first
qt_add_protobuf(test_service_protobuf
    PROTO_FILES
        test_service.protobuf
)
...
# Add separate target with the generated code of the \gRPC client.
qt_add_grpc(test_service_client CLIENT
    PROTO_FILES
        test_service.protobuf
)
target_link_libraries(test_service_client PRIVATE test_service_protobuf)

引数

  • PROTO_FILES は、コード生成手順で使用される.protoファイルのリストを指定します。
  • PROTO_INCLUDES protobufの依存関係を検索するディレクトリのリストを指定します。

    注: PROTO_FILES の場所は、暗黙的に protobuf のインクルードパスの一部と見なされます。

  • QMLgRPC サービスの QML クライアント API を生成します。この引数にはGrpcQuick Qt コンポーネントが必要です。
    find_package(Qt6 6.8 REQUIRED COMPONENTS Quick Protobuf ProtobufQuick Grpc GrpcQuick)
    ...
    # Generate the protobuf types
    qt_add_protobuf(test_service_client
        PROTO_FILES
            test_service.protobuf
        QML
    )
    ...
    # Generate \gRPC client functionality
    qt_add_grpc(test_service_client CLIENT
        PROTO_FILES
            test_service.protobuf
        QML
    )
  • OUTPUT_DIRECTORY 生成されたファイルを置くディレクトリを定義します。デフォルトでは、現在のビルドディレクトリが使用されます。
  • GENERATE_PACKAGE_SUBFOLDERS は、.proto ファイルのパッケージ名指定子を使用して、生成されるファイルのフォルダ構造を作成します。たとえば、パッケージがpackage io.qt.testと定義されている場合、生成されたファイルはOUTPUT_DIRECTORY/io/qt/test/ に置かれます。
  • COPY_COMMENTS .proto ファイルのコメントを生成コードにコピーします。
  • EXPORT_MACRO <target> から新しい共有ライブラリを作成する場合にのみ適用されますこのオプションは、生成されるコードで使用されるエクスポート・マクロのベース名を指定します。最終的なマクロ名はQPB_<EXPORT_MACRO>_EXPORT のように構成されます。このオプションが設定されていない場合、ターゲット名はEXPORT_MACRO として使用されます。

    さらに詳しい情報については、共有ライブラリの作成をお読みください。

  • OUTPUT_HEADERS は、生成されたヘッダーのリストを格納する変数を指定します。このリストは、カスタム・プロジェクトのインストール・ルールを定義するのに便利です。
  • OUTPUT_TARGETS は、生成されたターゲットのリストを格納する変数を指定します。このリストはカスタムプロジェクトのインストールルールを定義するのに便利です。
  • HEADER_GUARD は、生成されたヘッダーファイルが複数インクルードされないようにする ためのメカニズムを指定します。指定できる値はpragmafilename です。デフォルトはfilename です。このオプションをpragma に設定すると、最新のプラグマ・ヘッダー・ガードが生成されます:
    #pragma once
    ...

    このオプションを省略するか、オプションをfilename に設定すると、ifdef ラッピングガードが生成され、ガード接尾辞として '.proto' ファイル名を使用します:

    #ifdef MYMESSAGES_QPB_H
    #define MYMESSAGES_QPB_H
    ...
    #endif // MYMESSAGES_QPB_H

    プロジェクトの構造に応じて、好みのガードスタイルを選択してください。

qtgrpcgen ツールも参照してください

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.