En esta página

qt_add_grpc

Genera servicios C++ basados en Qt utilizando un esquema protobuf.

El comando está definido en el componente Grpc del paquete Qt6. Cargue el paquete con:

find_package(Qt6 REQUIRED COMPONENTS Grpc)

Este comando se introdujo en Qt 6.5.

Normalmente qtgrpcgen se invoca a través de la macro qt_add_grpc CMake.

Sinopsis

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

Nota: Actualmente sólo se soporta la generación de código CLIENT.

Si los comandos sin versión están desactivados, utilice qt6_add_grpc() en su lugar. Admite el mismo conjunto de argumentos que este comando.

Descripción

qtgrpcgen crea los archivos de origen y los añade al destino. Si el destino ya existe, los archivos se añaden a la lista de fuentes del destino. Si el destino no existe, se crea como una biblioteca a la que debe enlazar.

La biblioteca gRPC que se genera utilizando el comando qt_add_grpc hace referencia a los símbolos protobuf que se utilizan en las llamadas de servicio. Esto significa que debe utilizar un objetivo común en las llamadas qt_add_protobuf y qt_add_grpc o enlazar la biblioteca protobuf generada con la de gRPC.

Teniendo en cuenta la declaración anterior puede reutilizar el objetivo tanto para protobuf y gRPC código de cliente:

# 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 quieres tener objetivos separados entonces necesitas enlazar el objetivo del cliente gRPC con el del 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)

Argumentos

  • PROTO_FILES especifica la lista de archivos .proto utilizados por el procedimiento de generación de código.
  • PROTO_INCLUDES especifica la lista de directorios en los que buscar dependencias de protobuf.

    Nota: La ubicación de PROTO_FILES se considera implícitamente parte de la ruta de inclusión del protobuf.

  • QML genera la API de cliente QML para el servicio gRPC. El argumento requiere el componente 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 define el directorio donde se colocarán los archivos generados. Por defecto, se utiliza el directorio de construcción actual.
  • GENERATE_PACKAGE_SUBFOLDERS utiliza el especificador de nombre de paquete de los archivos .proto para crear la estructura de carpetas de los archivos generados. Por ejemplo, si el paquete se define como: package io.qt.test los archivos generados se colocarán en OUTPUT_DIRECTORY/io/qt/test/.
  • COPY_COMMENTS copia los comentarios de los archivos .proto en el código generado.
  • EXPORT_MACRO sólo se aplica al crear una nueva biblioteca compartida a partir del <target>. Esta opción especifica el nombre base para la macro de exportación utilizada en el código generado. El nombre final de la macro se construye como QPB_<EXPORT_MACRO>_EXPORT. Si no se establece esta opción, el nombre de destino se utiliza como EXPORT_MACRO.

    Lea Creación de bibliotecas compartidas para obtener más información en profundidad.

  • OUTPUT_HEADERS especifica una variable que almacenará la lista de cabeceras generadas. Esta lista puede ser útil para definir reglas personalizadas de instalación del proyecto.
  • OUTPUT_TARGETS especifica una variable que almacenará la lista de objetivos generados. Esta lista puede ser útil para definir reglas de instalación personalizadas.
  • HEADER_GUARD especifica el mecanismo utilizado para proteger los archivos de cabecera generados de la inclusión múltiple. Los valores posibles son pragma, filename. Por defecto es filename. Establecer la opción a pragma genera el moderno pragma header guard:
    #pragma once
    ...

    Omitir la opción o establecerla en filename genera la protección de envoltura ifdef y utiliza el nombre de archivo '.proto' como infijo de protección:

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

    Seleccione el estilo de guardia preferido según la estructura de su proyecto.

Véase también La herramienta 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.