Das Werkzeug qtgrpcgen

Das Werkzeug qtgrpcgen kann verwendet werden, um Qt GRPC Dienstklassen aus einem Protobuf-Schema zu erzeugen. Das Werkzeug wird vom CMake Qt6::GrpcTools Paket bereitgestellt. Es arbeitet als eine Erweiterung des protoc Werkzeugs von Google.

find_package(Qt6 COMPONENTS GrpcTools REQUIRED)

Verwendung

Qt bietet CMake-Funktionen, die die Verwendung des Tools qtgrpcgen erleichtern. Wenn Sie CMake als Build-Tool verwenden, ist es besser, die Qt CMake API zu benutzen. Für andere Build-Systeme als CMake können Sie die Befehle, die im Abschnitt qtgrpcgen ausführen beschrieben sind, manuell anpassen.

Anmerkung: Es gibt keine explizite Unterstützung für das Bauen von gRPC und Protobuf-Applikationen unter Verwendung des Qt GRPC Moduls mit qmake.

CMake

Die folgenden CMake-Befehle integrieren einen gRPC -Dienst in ein Qt-Projekt.

qt_add_grpc

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

Normalerweise wird qtgrpcgen über CMake mit dem Makro qt_add_grpc aufgerufen, wie im folgenden Beispiel gezeigt:

cmake_minimum_required(VERSION 3.16...3.22)
project(MyProject)

find_package(Qt6 REQUIRED COMPONENTS Protobuf Grpc)
qt_standard_project_setup()

qt_add_executable(MyApp main.cpp)

qt_add_protobuf(MyApp
    PROTO_FILES
        path/to/messages.proto
)

qt_add_grpc(MyApp CLIENT
    PROTO_FILES
        path/to/service.proto
)

target_link_libraries(MyApp PRIVATE Qt6::Protobuf Qt6::Grpc)

Das obige Beispiel ruft die CMake-Funktion qt_add_grpc() auf, um die Codegenerierung Qt GRPC für service Abschnitte innerhalb des angegebenen Protobuf-Schemas zu starten.

Hinweis: Wenn das Protobuf-Schema auch message Definitionen enthält, sollte die qt_add_protobuf() CMake-Funktion ebenfalls aufgerufen werden, um die Qt Protobuf Codegenerierung zu starten.

Da wir das ausführbare Ziel wiederverwenden, werden alle generierten Dateien an das Ziel angehängt und die Include-Verzeichnisse werden entsprechend aktualisiert.

Manuelles Ausführen von qtgrpcgen

protoc --plugin=protoc-gen-qtgrpc=<path/to/bin/>qtgrpcgen \
    --qtgrpc_out="[<options>:]<output_dir>" \
    [--qtgrpc_opt="<options>"] \
    [-I/extra/proto/include/path] \
    <protofile>.proto

Das Argument options ist eine durch Semikolon getrennte Liste von Optionen. Sie kann durch Anhängen von options an das Argument --qtgrpc_out, getrennt durch einen Doppelpunkt, oder durch ein separates Argument, --qtgrpc_opt, übergeben werden. Sie können die entsprechenden Schlüssel auch als Umgebungsvariable QT_GRPC_OPTIONS übergeben. Die Schlüssel müssen als durch Semikolon getrennte Liste übergeben werden:

export QT_GRPC_OPTIONS="COPY_COMMENTS;GENERATE_PACKAGE_SUBFOLDERS"

Optionen

Der Generator unterstützt Optionen, die zur Abstimmung der Generierung angegeben werden können. Optionen haben direkte Aliase in der Funktion qt_add_grpc. Die folgenden Optionen werden unterstützt:

  • COPY_COMMENTS kopiert Kommentare aus den .proto Dateien in den generierten Code.
  • GENERATE_PACKAGE_SUBFOLDERS verwendet den Paketnamen aus den .proto Dateien, um die Ordnerstruktur für die generierten Dateien zu erstellen. Zum Beispiel, wenn das Paket definiert ist als: package io.qt.test werden die generierten Dateien in OUTPUT_DIRECTORY/io/qt/test/ abgelegt.
  • EXPORT_MACRO definiert den Basisnamen für das im generierten Code verwendete Exportmakro. Der endgültige Makroname wird wie QPB_<EXPORT_MACRO>_EXPORT aufgebaut. Wenn diese Option nicht gesetzt ist, wird kein Exportmakro erzeugt.

    Seit Qt 6.8 wird das folgende Format unterstützt: EXPORT_MACRO=macro_name[:macro_output_file[:<true|false>]]. Dieses Format erlaubt es Ihnen, den Namen der Header-Datei anzugeben, die das Exportmakro enthält, und explizit zu steuern, ob es generiert wird.

    Hinweis: Wenn <macro_output_file> nicht angegeben wird, wird die Option auf die vorherige Syntax zurückgesetzt.

  • QML aktiviert die Erzeugung eines QML-Clients für den Dienst gRPC.

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