本页

QTP0005

qt_add_qml_module 依赖关系关键字接受 CMake 目标

此策略在 Qt 6.8 中引入。它允许通过DEPENDENCIES,IMPORTS,OPTIONAL_IMPORTS, 和DEFAULT_IMPORTS 关键字向qt_add_qml_module()传递 CMake 目标。

启用该策略意味着传递给这些关键字的参数可以以TARGET 为前缀,然后被视为 CMake 目标名称。QML 模块 URI 和导入路径会自动从目标中导出。

该策略的OLD 行为是,标记序列TARGET name 被视为两个独立的 URI,即TARGETname

该策略的NEW 行为是TARGET 是一个关键字。URI 从后面的 QML 模块目标中提取。如果TARGET 后面的名称不是指现有的目标,或该目标与 QML 模块不对应,则是硬性错误。

NEWOLD 行为中,可以通过附加斜线和版本来指定模块版本。详情请参阅 "声明模块依赖关系"。

背景

在此策略之前,QML 模块的依赖关系必须通过字符串 URI 声明,例如QtQuickcom.example.mymodule 。这意味着依赖关系的 URI 和导入路径(如需要)必须与提供模块的 CMake 目标保持一致。

有了NEW 行为,您可以用 CMake 目标名称来替代依赖关系。然后,编译系统会自动从目标中确定正确的 URI 和导入路径。这样就不需要为 QML 默认导入路径之外的依赖项手动指定IMPORT_PATH,减少了冗余,并消除了一类复制粘贴错误。

举例说明

考虑一个依赖于同一项目中定义的另一个模块的模块。使用OLD 行为(或 Qt 6.8 之前的行为)时,必须明确写出 URI:

qt_add_qml_module(my_module
    URI MyModule
    VERSION 1.0
    DEPENDENCIES
        OtherModule
)

使用NEW 行为(策略 QTP0005 设置为NEW )时,可以通过 CMake 目标名称来引用依赖关系:

qt_policy(SET QTP0005 NEW)

qt_add_qml_module(other_module
    URI OtherModule
    VERSION 1.0
)

qt_add_qml_module(my_module
    URI MyModule
    VERSION 1.0
    DEPENDENCIES
        TARGET other_module
)

TARGET 语法同样适用于IMPORTSOPTIONAL_IMPORTSDEFAULT_IMPORTS

如上所示,你可以在调用qt_add_qml_module() 之前通过qt_policy(SET QTP0005 NEW) 明确设置策略。或者,使用REQUIRES 6.8 或更高版本调用qt_standard_project_setup(),启用该版本之前的所有策略。

如果在DEPENDENCIESIMPORTSOPTIONAL_IMPORTSDEFAULT_IMPORTS 中使用TARGET 作为标记,而策略被设置为OLD ,Qt 6.8 会发出弃用警告。使用qt_policy命令,通过显式地将策略设置为OLDNEW 来抑制该警告。

注意: 策略的OLD 行为已被弃用,将来可能会被移除。

另请参阅 qt_policyqt_standard_project_setup()qt_cmake_policiesqt_add_qml_module

© 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.