qtprotobufgen 工具

qtprotobufgen 工具可以从 protobuf 架构中生成 Qt Protobuf 类。该工具由 CMake 包 Qt6::ProtobufTools 提供。它作为 Google 的 protoc 工具的扩展。

find_package(Qt6 COMPONENTS ProtobufTools REQUIRED)

用法

Qt 提供了 CMake 函数,以简化 qtprotobufgen 工具的使用。在将 CMake 作为构建工具使用时,应首选使用 Qt CMake API。对于 CMake 之外的其他构建系统,请根据 手动运行 中描述的命令进行调整。

注意:使用 Qt GRPC 模块以 qmake 的方式构建 gRPC 和 Protobuf 应用程序没有显式支持。

CMake

以下 CMake 命令将 protobuf 架构集成到 Qt 项目中。

qt_add_protobuf

使用 protobuf 架构生成基于 Qt 的 C++ 源代码

通常通过在 CMake 中使用 qt_add_protobuf 宏来调用 qtprotobufgen

使用 qt_add_protobuf

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

find_package(Qt6 REQUIRED COMPONENTS Protobuf)
qt_standard_project_setup()

qt_add_protobuf(MyMessages
    GENERATE_PACKAGE_SUBFOLDERS
    PROTO_FILES
        path/to/message.proto
        path/to/other_message.proto
    PROTO_INCLUDES
        /path/to/proto/include
)

qt_add_executable(MyApp main.cpp)

target_link_libraries(MyApp PRIVATE MyMessages)

在上面的示例中,我们生成一个名为 MyMessages 的库,该库包含 PROTO_FILES 选项传递的路径中定义的消息类型。使用了 GENERATE_PACKAGE_SUBFOLDERS 选项以生成生成的文件的文件夹结构。而 PROTO_INCLUDES 选项告诉 protoc 在指定的目录中查找依赖项或导入。我们创建了一个名为 MyApp 的可执行文件的目标,并将其链接到 MyMessages 库。

手动运行

protoc --plugin=protoc-gen-qtprotobuf=<path/to/bin/>qtprotobufgen \
    --qtprotobuf_out="[<options>:]<output_dir>" \
    [--qtprotobuf_opt="<options>"] \
    [-I/extra/proto/include/path] \
    <protofile>.proto

options 参数是一个分号分隔的选项列表。它可以以两种方式传递。一种是在输出目录参数之前添加选项,用冒号分隔;另一种是通过一个单独的参数,--qtprotobuf_opt。您还可以通过将对应的键作为 QT_PROTOBUF_OPTIONS 环境变量传递。键需要以分号分隔的列表形式呈现。

export QT_PROTOBUF_OPTIONS="COPY_COMMENTS;GENERATE_PACKAGE_SUBFOLDERS;EXTRA_NAMESPACE=MyTopLevelNamespace"

选项

生成器支持可以提供来调整生成的选项。这些选项在 qt_add_protobuf 函数中有直接别名。以下选项受支持:

  • COPY_COMMENTS.proto 文件中复制注释。如果提供在参数列表中,则将与消息和字段相关的注释复制到生成的头文件中。
  • GENERATE_PACKAGE_SUBFOLDERS 为生成的文件生成与 .proto 文件包名称匹配的文件夹结构。例如,package io.qt.test; 将生成的文件放入 io/qt/test/
  • EXTRA_NAMESPACE 是一个可选的命名空间,它将用于生成的类。类总是生成在具有与 .proto 文件中指定的包名相同的命名空间。如果使用此选项,则所有内容都将嵌套在额外的命名空间中。
  • EXPORT_MACRO 是用于生成的代码的符号导出宏的基本名称。生成的宏名构建为 QPB_<EXPORT_MACRO>_EXPORT。如果未设置此选项,则不会生成宏。
  • QML_URI 通过通过提供的 URI 导入路径在 QML 模块中注册它们来启用 QML 上下文中的 QProtobufMessage 类型。生成的 qmldir 文件的行中将使用 URI 选项,并且还用于通过用正斜杠替换点来形成目标路径。

    注意:阅读 已识别模块 获取对 URI 的进一步深入讨论。

© 2024 Qt 公司有限公司。此处包含的文档贡献的版权属于各自的拥有者。此处提供的文档是根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款授予权利的。Qt 和相关标志是芬兰的 Qt 公司以及世界各地的商标。所有其他商标都是其各自所有者的财产。