Auf dieser Seite

qt_add_grpc

Erzeugt Qt-basierte C++-Dienste unter Verwendung eines Protobuf-Schemas

Der Befehl ist in der Grpc-Komponente des Qt6-Pakets definiert. Laden Sie das Paket mit folgendem Befehl:

find_package(Qt6 REQUIRED COMPONENTS Grpc)

Dieser Befehl wurde in Qt 6.5 eingeführt.

In der Regel wird „ qtgrpcgen “ über das CMake-Makro „ qt_add_grpc “ aufgerufen.

Übersicht

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>]
)

Hinweis: Derzeit wirdnur die Codegenerierung für „ CLIENT “ unterstützt.

Wenn versionlose Befehle deaktiviert sind, verwenden Sie stattdessen „ qt6_add_grpc() “. Dieser Befehl unterstützt dieselben Argumente wie der vorliegende Befehl.

Beschreibung

Die Quelldateien werden von qtgrpcgen erstellt und dem Ziel hinzugefügt. Wenn das Ziel bereits existiert, werden die Dateien zur Quellliste des Ziels hinzugefügt. Wenn das Ziel nicht existiert, wird es als Bibliothek erstellt, die Sie einbinden müssen.

Die gRPC™ Bibliothek, die mit dem Befehl „ qt_add_grpc “ generiert wird, verweist auf die Protobuf-Symbole, die in Service-Aufrufen verwendet werden. Das bedeutet, dass Sie entweder sowohl bei Aufrufen von `qt_add_protobuf()` als auch von `qt_add_grpc()` dasselbe Ziel verwenden oder die generierte Protobuf-Bibliothek mit der Bibliothek „ gRPC “ verknüpfen müssen.

Unter Berücksichtigung der obigen Aussage können Sie das Ziel sowohl für den Protobuf- als auch für den „ gRPC “-Client-Code wiederverwenden:

# 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
)

Wenn Sie separate Ziele verwenden möchten, müssen Sie das „ gRPC “-Client-Ziel mit dem Protobuf-Ziel verknüpfen:

# 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)

Argumente

  • PROTO_FILES Gibt die Liste der .proto -Dateien an, die vom Code-Generierungsprozess verwendet werden.
  • PROTO_INCLUDES Gibt die Liste der Verzeichnisse an, in denen nach Protobuf-Abhängigkeiten gesucht werden soll.

    Hinweis: Der Speicherort von „ PROTO_FILES “ wird implizit als Teil des Protobuf-Include-Pfads betrachtet.

  • QML Generiert die QML-Client-API für den „ gRPC “-Dienst. Das Argument setzt die Qt-Komponente „ GrpcQuick “ voraus.
    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 Definiert das Verzeichnis, in dem die generierten Dateien abgelegt werden. Standardmäßig wird das aktuelle Build-Verzeichnis verwendet.
  • GENERATE_PACKAGE_SUBFOLDERS Verwendet den Paketnamen aus den „ .proto “-Dateien, um die Ordnerstruktur für die generierten Dateien zu erstellen. Wenn das Paket beispielsweise als „ package io.qt.test “ definiert ist, werden die generierten Dateien in „OUTPUT_DIRECTORY/io/qt/test/“ abgelegt .
  • COPY_COMMENTS Kopiert Kommentare aus den „ .proto “-Dateien in den generierten Code.
  • EXPORT_MACRO Gilt nur beim Erstellen einer neuen gemeinsam genutzten Bibliothek aus dem <target>. Diese Option legt den Basisnamen für das im generierten Code verwendete Export-Makro fest. Der endgültige Makroname wird als „ QPB_<EXPORT_MACRO>_EXPORT “ gebildet. Ist diese Option nicht gesetzt, wird der Zielname als „ EXPORT_MACRO “ verwendet.

    Weitere ausführliche Informationen finden Sie unter „Erstellen von gemeinsam genutzten Bibliotheken “.

  • OUTPUT_HEADERS Gibt eine Variable an, in der die Liste der generierten Header gespeichert wird. Diese Liste kann für die Definition benutzerdefinierter Projektinstallationsregeln nützlich sein.
  • OUTPUT_TARGETS Legt eine Variable fest, in der die Liste der generierten Ziele gespeichert wird. Diese Liste kann für die Definition benutzerdefinierter Projektinstallationsregeln nützlich sein.
  • HEADER_GUARD Legt den Mechanismus fest, der verwendet wird, um generierte Header-Dateien vor mehrfacher Einbindung zu schützen. Mögliche Werte sind „ pragma “ und „ filename “. Der Standardwert ist „ filename “. Wenn die Option auf „ pragma “ gesetzt wird, wird der moderne Pragma-Header-Guard generiert:
    #pragma once
    ...

    Wird die Option weggelassen oder auf ` filename ` gesetzt, wird der ` ifdef `-Wrapping-Guard generiert und der Dateiname `.proto` als Guard-Infix verwendet:

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

    Wählen Sie den bevorzugten Guard-Stil entsprechend Ihrer Projektstruktur aus.

Siehe auch Das Tool „qtgrpcgen“.

© 2026 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.