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 项目中。
使用 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 公司以及世界各地的商标。所有其他商标都是其各自所有者的财产。