Sur cette page

qt_add_grpc

Génère des services C++ basés sur Qt en utilisant un schéma protobuf.

La commande est définie dans le composant Grpc du paquetage Qt6. Chargez le paquetage avec :

find_package(Qt6 REQUIRED COMPONENTS Grpc)

Cette commande a été introduite dans Qt 6.5.

Habituellement, qtgrpcgen est invoqué par le biais de la macro CMake qt_add_grpc.

Synopsis

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

Note : Seule la génération de code CLIENT est actuellement supportée.

Si les commandes sans version sont désactivées, utilisez qt6_add_grpc() à la place. Elle prend en charge le même ensemble d'arguments que cette commande.

Description de la commande

Les fichiers sources sont créés par qtgrpcgen et ajoutés à la cible. Si la cible existe déjà, les fichiers sont ajoutés à la liste des sources de la cible. Si la cible n'existe pas, elle est créée en tant que bibliothèque vers laquelle vous devez établir un lien.

La bibliothèque gRPC générée par la commande qt_add_grpc fait référence aux symboles protobuf utilisés dans les appels de service. Cela signifie que vous devez soit utiliser une cible commune dans les appels qt_add_protobuf et qt_add_grpc, soit lier la bibliothèque protobuf générée à celle de gRPC.

Compte tenu de ce qui précède, vous pouvez réutiliser la cible pour le code client protobuf et 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
)

Si vous voulez avoir des cibles séparées, vous devez lier la cible du client gRPC à celle de 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)

Arguments

  • PROTO_FILES spécifie la liste des fichiers .proto utilisés par la procédure de génération de code.
  • PROTO_INCLUDES spécifie la liste des répertoires à rechercher pour les dépendances protobuf.

    Remarque : l'emplacement de PROTO_FILES est implicitement considéré comme faisant partie du chemin d'inclusion de protobuf.

  • QML génère l'API client QML pour le service gRPC. L'argument nécessite le composant Qt GrpcQuick.
    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 définit le répertoire dans lequel les fichiers générés seront placés. Par défaut, le répertoire de construction actuel est utilisé.
  • GENERATE_PACKAGE_SUBFOLDERS utilise le nom du paquetage spécifié dans les fichiers .proto pour créer la structure du dossier pour les fichiers générés. Par exemple, si le paquet est défini comme : package io.qt.test les fichiers générés seront placés dans OUTPUT_DIRECTORY/io/qt/test/.
  • COPY_COMMENTS copie les commentaires des fichiers .proto dans le code généré.
  • EXPORT_MACRO ne s'applique que lors de la création d'une nouvelle bibliothèque partagée à partir de la <target>. Cette option spécifie le nom de base de la macro d'exportation utilisée dans le code généré. Le nom final de la macro est construit comme QPB_<EXPORT_MACRO>_EXPORT. Si cette option n'est pas définie, le nom de la cible est utilisé comme EXPORT_MACRO.

    Pour plus d'informations, lisez la section Création de bibliothèques partagées.

  • OUTPUT_HEADERS spécifie une variable qui stockera la liste des en-têtes générés. Cette liste peut être utile pour définir des règles d'installation de projet personnalisées.
  • OUTPUT_TARGETS spécifie une variable qui stockera la liste des cibles générées. Cette liste peut être utile pour définir des règles d'installation de projets personnalisés.
  • HEADER_GUARD spécifie le mécanisme utilisé pour protéger les fichiers d'en-tête générés contre l'inclusion multiple. Les valeurs possibles sont pragma, filename. La valeur par défaut est filename. La définition de l'option à pragma génère le mécanisme moderne de protection des fichiers d'en-tête pragma :
    #pragma once
    ...

    L'omission de l'option ou la définition de l'option à filename génère le mécanisme de protection ifdef et utilise le nom de fichier '.proto' comme infixe de protection :

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

    Sélectionnez le style de garde préféré en fonction de la structure de votre projet.

Voir aussi L'outil 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.