qt_add_grpc
Erzeugt Qt-basierte C++-Dienste unter Verwendung eines Protobuf-Schemas
Dieser Befehl wurde in Qt 6.5 eingeführt.
Normalerweise wird qtgrpcgen über das CMake-Makro qt_add_grpc aufgerufen.
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 wird nur die Codegenerierung von CLIENT unterstützt.
Die Quelldateien werden von qtgrpcgen erstellt und dem Ziel hinzugefügt. Wenn das Ziel bereits existiert, werden die Dateien zur Liste der Zielquellen hinzugefügt. Wenn das Ziel nicht existiert, wird es als Bibliothek erstellt, zu der Sie einen Link erstellen müssen.
Die gRPC™ Bibliothek, die mit dem Befehl qt_add_grpc erzeugt wird, bezieht sich auf die Protobuf-Symbole, die in Dienstaufrufen verwendet werden. Das bedeutet, dass Sie entweder ein gemeinsames Ziel in den Aufrufen von qt_add_protobuf und qt_add_grpc verwenden müssen oder die generierte protobuf Bibliothek mit der gRPC Bibliothek verlinken müssen.
In Anbetracht der obigen Aussage können Sie das Target 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 getrennte Targets haben wollen, müssen Sie das gRPC Client-Target mit dem protobuf-Target linken:
# 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_FILESgibt die Liste der .proto-Dateien an, die von der Codegenerierung verwendet werden.PROTO_INCLUDESspezifiziert die Liste der Verzeichnisse, die nach protobuf-Abhängigkeiten durchsucht werden sollen.Hinweis: Der Ort der
PROTO_FILESwird implizit als Teil des protobuf-Include-Pfads betrachtet.QMLerzeugt die QML-Client-API für den Dienst gRPC. Das Argument setzt die Qt-KomponenteGrpcQuickvoraus.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_DIRECTORYdefiniert das Verzeichnis, in dem die generierten Dateien abgelegt werden. Standardmäßig wird das aktuelle Build-Verzeichnis verwendet.GENERATE_PACKAGE_SUBFOLDERSverwendet den Paketnamen aus den.protoDateien, um die Ordnerstruktur für die generierten Dateien zu erstellen. Wenn das Paket zum Beispiel definiert ist als:package io.qt.testwerden die generierten Dateien in OUTPUT_DIRECTORY/io/qt/test/ abgelegt.COPY_COMMENTSkopiert Kommentare aus den.protoDateien in den generierten Code.EXPORT_MACROgilt nur für die Erstellung einer neuen Shared Library aus <target>. Diese Option gibt den Basisnamen für das im generierten Code verwendete Exportmakro an. Der endgültige Makroname wird wieQPB_<EXPORT_MACRO>_EXPORTaufgebaut. Wenn diese Option nicht gesetzt ist, wird der ZielnameEXPORT_MACROverwendet.Weitere ausführliche Informationen finden Sie unter Gemeinsame Bibliotheken erstellen.
OUTPUT_HEADERSgibt eine Variable an, in der die Liste der generierten Header gespeichert wird. Diese Liste kann für die Definition von benutzerdefinierten Projektinstallationsregeln nützlich sein.OUTPUT_TARGETSgibt eine Variable an, in der die Liste der generierten Targets gespeichert wird. Diese Liste kann für die Definition von benutzerdefinierten Projektinstallationsregeln nützlich sein.HEADER_GUARDspezifiziert den Mechanismus, der verwendet wird, um generierte Header-Dateien vor mehrfacher Einbindung zu schützen. Mögliche Werte sindpragma,filename. Der Standardwert istfilename. Wenn Sie die Option aufpragmasetzen, wird das moderne pragma header guard erzeugt:#pragma once ...
Das Weglassen der Option oder das Setzen der Option auf
filenameerzeugt denifdefWrapping Guard und verwendet den '.proto' Dateinamen als Guard-Infix:#ifdef MYMESSAGES_QPB_H #define MYMESSAGES_QPB_H ... #endif // MYMESSAGES_QPB_H
Wählen Sie den bevorzugten Guard-Stil entsprechend Ihrer Projektstruktur.
Siehe auch Das Werkzeug 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.