Sur cette page

qt_add_grpc

Génère des services C++ basés sur Qt à partir d'un schéma protobuf

Cette commande est définie dans le composant Grpc du paquet Qt6. Chargez le paquet à l'aide de la commande suivante :

find_package(Qt6 REQUIRED COMPONENTS Grpc)

Cette commande a été introduite dans Qt 6.5.

En général, la fonction ` qtgrpcgen ` est appelée via la macro CMake ` qt_add_grpc `.

Syntaxe

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

Remarque : seule la génération de code « CLIENT » est actuellement prise en charge.

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

Description

Les fichiers source 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 sous forme de bibliothèque à laquelle vous devez lier votre programme.

La gRPC™ bibliothèque générée à l’aide de 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 pour 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 même cible pour le code client protobuf et celui d’ 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 souhaitez disposer de cibles distinctes, vous devez lier la cible 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 à parcourir pour rechercher les dépendances protobuf.

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

  • QML génère l’API client QML pour le service « gRPC ». Cet 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 compilation actuel est utilisé.
  • GENERATE_PACKAGE_SUBFOLDERS utilise le spécificateur de nom de paquet issu des fichiers .proto pour créer la structure de dossiers des fichiers générés. Par exemple, si le paquet est défini comme suit : 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 S'applique uniquement lors de la création d'une nouvelle bibliothèque partagée à partir de <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 sous la forme QPB_<EXPORT_MACRO>_EXPORT. Si cette option n'est pas définie, le nom de la cible est utilisé sous la forme EXPORT_MACRO.

    Consultez la section Création de bibliothèques partagées pour plus d’informations détaillé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 personnalisées pour le projet.
  • HEADER_GUARD spécifie le mécanisme utilisé pour empêcher l’inclusion multiple des fichiers d’en-tête générés. Les valeurs possibles sont pragma et filename. La valeur par défaut est filename. Définir cette option sur pragma génère la protection d’en-tête pragma moderne :
    #pragma once
    ...

    Si l’option est omise ou définie sur filename, la protection d’encapsulation ifdef est générée, et le nom de fichier « .proto » est utilisé comme infixe de protection :

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

    Choisissez le style de garde qui convient le mieux à 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.