You should call the following CMake commands to use the Qt6::Protobuf module in your project:
find_package(Qt6 REQUIRED COMPONENTS Protobuf) target_link_libraries(mytarget PRIVATE Qt6::Protobuf)
可以使用 qt-add-protobuf CMake macros. The macros implicitly call Protobuf code generation for qt-project.
The macros usage examples:
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)
In the example above, we generate a library called
MyMessages
, which contains the message types defined in the paths passed to the
PROTO_FILES
option. The
GENERATE_PACKAGE_SUBFOLDERS
option to generate a folder structure for the generated files. And the
PROTO_INCLUDES
option tells protoc to look for dependencies or imports in the specified directories. We create a target for an executable called
MyApp
, which we link to the
MyMessages
库。
cmake_minimum_required(VERSION 3.16...3.22) project(MyThings) find_package(Qt6 REQUIRED COMPONENTS Protobuf Quick) qt_standard_project_setup() qt_add_protobuf(MyMessagesPlugin QML QML_URI my.messages.module.uri PROTO_FILES path/to/message.proto path/to/other_message.proto PROTO_INCLUDES /path/to/proto/include ) qt_add_protobuf(MyApp QML PROTO_FILES path/to/internal_message.proto PROTO_INCLUDES /path/to/proto/include ) qt_add_qml_module(MyApp URI example.uri VERSION 1.0 QML_FILES qml/main.qml ) qt_add_executable(MyApp main.cpp) target_link_libraries(MyApp PRIVATE Quick)
In the QML extended example above, by the first
qt_add_protobuf
call, we generate a QML module called
MyMessagesPlugin
, which contains the message types defined in the paths passed to the
PROTO_FILES
option. We use the
QML
option, that enables proto message types registration in the
QML
context. The registered types will be available in
QML
by importing a path that is set by the
QML_URI
. By second
qt_add_protobuf
call we add auto-generated code into the existing
MyApp
QML module. The
QML_URI
is not required in such cases. Finally, we create a target for an executable called
MyApp
, which has a QML module for the graphical part and loads
MyMessagesPlugin
into the main.qml file via the
my.messages.module.uri
导入。
另请参阅 CMake 命令参考 .
Generates Qt-based C++ source code using a protobuf schema |