QML 的 CMake 集成
Qt 为构建 QML 模块和应用程序提供了广泛的 CMake 集成。
CMake 核心命令
qt_add_qml_module
qt_add_qml_module命令是在 CMake 中创建 QML 模块的主要功能。它处理 QML 类型注册、资源嵌入、插件创建,并与 Qt 的构建系统集成,提供了一种声明式方法来定义 QML 模块的所有方面。
qt_target_qml_sources
qt_target_qml_sources命令将 QML 文件和资源添加到现有的 QML 模块目标中。这对于组织大型模块或根据构建配置有条件地包含 QML 文件非常有用。
qt_add_qml_plugin
qt_add_qml_plugin命令创建一个 QML 插件库,QML 引擎可动态加载该库。虽然qt_add_qml_module 通常会自动处理插件创建,但该功能可在需要时提供较低级别的控制。
部署命令
qt_deploy_qml_imports
qt_deploy_qml_imports命令可识别并部署应用程序使用的所有 QML 导入,包括它们的依赖关系。这可确保所有必要的 QML 模块和插件都与应用程序打包在一起。
qt_generate_deploy_qml_app_script
qt_generate_deploy_qml_app_script命令会生成一个特定于平台的部署脚本,用于将 QML 模块、插件和其他资源复制到应用程序捆绑包或安装目录中的正确位置。
qt_import_qml_plugins
qt_import_qml_plugins命令可确保 QML 插件正确链接到静态构建的应用程序中,并生成必要的初始化代码,以便在 QML 引擎中注册插件。
高级命令
qt_generate_foreign_qml_types
qt_generate_foreign_qml_types命令为其他库或模块中定义的 C++ 类型创建 QML 类型注册。这使你能在不修改源代码的情况下,将第三方或 Qt 类型公开到 QML 中。
qt_query_qml_module
qt_query_qml_module命令可检索 QML 模块的信息,如 URI、版本、插件目标和类型信息文件路径。这对构建系统自省和工具集成非常有用。
qt_target_compile_qml_to_cpp
使用qt_target_compile_qml_to_cpp命令,可使用qmltc(QML 类型编译器)将 QML 文件编译为 C++。这为静态已知的 QML 类型提供了基于组件的实例化的替代方案,并提高了性能。
CMake 变量和属性
Qt Qml 提供了几个 CMake 变量和属性来配置 QML 模块行为:
全局变量
Qt6 Qml 中的 CMake 全局变量可控制项目中所有 QML 模块的默认行为。这些变量包括输出目录、缓存文件生成和工具集成,让您能在整个项目级别配置 QML 编译设置。
全局属性
Qt6 Qml 中的 CMake 全局属性(Global Properties)会影响编译系统处理 QML 模块的方式,并可用于定制目标组织和编译时代码生成等方面。
源文件属性
Qt6 Qml 中的 CMake 源文件属性允许对模块中的单个 QML 文件进行细粒度控制。您可以使用这些属性将文件标记为单子文件(singletons),将它们排除在编译步骤之外,指定自定义类型名称,或在 QML 类型系统中控制其他每个文件的行为。
CMake 策略
Qt Qml 定义了几个 CMake 策略来控制向后兼容性和行为。
QML 的 CMake 策略
CMakePolicies for QML页面概述了所有与 QML 相关的 CMake 策略,以及它们如何影响模块行为。策略允许你选择加入新行为,同时保持与现有项目的兼容性。
另请参阅 QML 模块、qt_add_qml_module 和编写 QML 模块。
© 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.