qt_target_qml_sources

该命令是在Qt 6.2中引入的。

概述

qt_target_qml_sources(
    target
    [QML_FILES ...]
    [RESOURCES ...]
    [PREFIX resource_path]
    [OUTPUT_TARGETS out_targets_var]
    [NO_LINT]
    [NO_CACHEGEN]
    [NO_QMLDIR_TYPES]
)

如果禁用了无版本命令,则使用qt6_target_qml_sources()。它支持与此命令相同的参数集。

描述

注意:此命令需要CMake 3.19或更高版本。

qt_target_qml_sources()提供在调用qt_add_qml_module()后向QML模块添加更多文件的能力。通常,您需要直接传递到qt_add_qml_module().qml文件和资源的集合,但在某些情况下,可能需要在调用qt_add_qml_module()之后添加文件。例如,您可能希望根据条件语句表达式有条件地添加文件,或者从仅满足某些条件的子目录添加。您可能希望将具有不同特性的文件集添加到其他文件中,例如具有不同资源前缀的文件,或者禁用lint和字节码编译。qt_target_qml_sources()命令启用这些场景。

参数

target必须是QML模块的后台目标,或者如果QML模块没有单独的后台目标,则它必须是模块的插件目标。

QML_FILES是要添加到QML模块中的.qml.js.mjs文件的列表。QML_FILES选项具有与qt_add_qml_module()命令中相同的QML_FILES选项完全相同的作用,包括自动编译为字节码和lint处理。

NO_CACHEGENNO_LINT选项也与qt_add_qml_module()具有相同的作用。它们禁用了使用QML_FILES列出的文件的字节码编译和lint处理。此行为也可以仅针对单个文件使用源文件属性进行指定。

NO_QMLDIR_TYPES禁止将QML_FILES添加到生成的qmldir文件中作为类型。

RESOURCES具有与qt_add_qml_module()命令中的RESOURCES选项完全相同的作用。它提供了要添加到target中的普通资源的文件列表。这些文件通常是QML代码以某种方式引用的东西,例如图像、着色器等。

通过QML_FILESRESOURCES添加到模块中的文件将与通过qt_add_qml_module()指令添加的文件具有相同的资源前缀和目标路径。可以通过使用PREFIX选项提供不同的位置来覆盖这一点。紧跟在PREFIX关键字之后的值将被直接使用,不会附加任何目标路径。每个文件的最终资源路径将是前缀,加上CMAKE_CURRENT_SOURCE_DIR以下的文件路径。《a href="qt-target-qml-sources.html#qt-resource-alias" translate="no">QT_RESOURCE_ALIAS源文件属性也可以用来覆盖那个相对路径。

qt_add_qml_module(backing
    URI Example
    VERSION 1.0
    RESOURCE_PREFIX /my.company.com/imports
)

qt_target_qml_sources(backing
    QML_FILES special/First.qml
    RESOURCES icons/logo.png
)

qt_target_qml_sources(backing
    PREFIX /other.company.com/debugging
    QML_FILES Inspector.qml
)

在上面的例子中,backing目标资源将具有以下内容

  • /my.company.com/imports/Example/special/First.qml
  • /my.company.com/imports/Example/icons/logo.png
  • /other.company.com/debugging/Inspector.qml

OUTPUT_TARGETS也与qt_add_qml_module()中相同的选项类似。用它来指定存储为静态构建生成的任何附加目标的变量的名称。如果target将被安装,这些附加目标也需要被安装以满足链接要求。

源文件属性

可以使用一些源文件属性来影响在QML模块处理的各个点上如何处理每个单独的.qml文件。这些覆盖了在调用qt_target_qml_sources()qt_add_qml_module()时指定的任何更高层选项。所有这些属性都需要在这两个命令中的任何一个之前设置。

将源文件中的QT_QML_SKIP_QMLLINT设置为TRUE可以阻止它包含在自动qmllint处理中。默认情况下,所有.qml文件都将包含在目标中的lint运行,但可以使用此选项排除特定的文件。

QT_QML_SKIP_CACHEGEN做类似的事情,当此属性设置为TRUE时,防止源文件编译成字节码。请注意,文件仍然将以未编译的形式作为资源添加到target中(参见缓存编译的QML源)。

将源文件属性QT_QML_SKIP_QMLDIR_ENTRY设置为TRUE可以防止该.qml文件作为类型添加到QML模块的类型info文件中(参见 自动生成 qmldir和类型info文件)。这通常只会用于不公开类型的文件,例如私有JS文件。

默认情况下,在生成qmldir文件时,将为提供类型的每个.qml文件生成单个类型条目。它将有一个版本号X.0,其中X是QML模块的主版本。如果QML模块设置了任何PAST_MAJOR_VERSIONS,则将应用相同的模式,并为每个过去的较大版本X追加X.0。对于需要为不同版本的集合提供类型条目的文件(例如,它是在0.0版本之后首次添加到小补丁版本中),请在源文件的QT_QML_SOURCE_VERSIONS属性中指定这些版本。将为每个版本创建一个类型条目。

如果提供的 .qml 文件类型为单例,请将它的 QT_QML_SINGLETON_TYPE 属性设置为 TRUE。同样,文件的 QT_QML_INTERNAL_TYPE 源属性也可以设置为 TRUE 以指示它提供的是内部类型。也可以使用 QT_QML_SOURCE_TYPENAME 属性来重写类型的名称。这三者都会反映在生成 qmldir 文件中的类型条目中。必须在 创建 单例所属的模块之前设置源属性。

使用 QML_FILESRESOURCES 列出的所有文件都会添加到 target 的资源中。它们在资源中的位置由一个基准点和相对路径组成。基准点默认为 QML 模块的资源前缀与其目标路径的拼接,但可以使用 PREFIX 参数来覆盖这些设置。相对路径默认为目标 SOURCE_DIR 目标属性的文件路径。可以通过在源文件上设置 QT_RESOURCE_ALIAS 属性来覆盖此相对路径。这通常用于从不同的目录收集文件,使它们在资源中出现在共同的位置。

set_source_files_properties(nested/way/down/File.qml PROPERTIES
    QT_RESOURCE_ALIAS File.qml
)
set_source_files_properties(TemplateFile.qml PROPERTIES
    QT_RESOURCE_ALIAS templates/File.qml
    QT_QML_SKIP_QMLDIR_ENTRY TRUE
    QT_QML_SKIP_QMLLINT TRUE
    QT_QML_SKIP_CACHEGEN TRUE
)
set_source_files_properties(FunnySingleton.qml PROPERTIES
    QT_QML_SINGLETON_TYPE TRUE
)
qt_add_qml_module(qt_target_qml_sources_example
    URI Example
    VERSION 2.3
    RESOURCE_PREFIX /my.company.com/imports
    QML_FILES
        nested/way/down/File.qml
        TemplateFile.qml
        FunnySingleton.qml
)

set_source_files_properties(some_old_thing.qml PROPERTIES
    QT_QML_SOURCE_VERSIONS "1.1;2.0"
    QT_QML_SOURCE_TYPENAME OldThing
)
set_source_files_properties(../../../images/button-types.png PROPERTIES
    QT_RESOURCE_ALIAS button-types.png
)
qt_target_qml_sources(qt_target_qml_sources_example
    QML_FILES some_old_thing.qml
    RESOURCES
        ../../../images/button-types.png
        doc/README.txt
)

在上面的示例中,qt_target_qml_sources_example 目标资源将包含以下内容

  • /my.company.com/imports/Example/File.qml
  • /my.company.com/imports/Example/FunnySingleton.qml
  • /my.company.com/imports/Example/templates/File.qml
  • /my.company.com/imports/Example/some_old_thing.qml
  • /my.company.com/imports/Example/button-types.png
  • /my.company.com/imports/Example/doc/README.txt

生成的 qmldir 文件将包含以下类型条目

File 2.0 File.qml
singleton FunnySingleton 2.0 FunnySingleton.qml
OldThing 1.1 some_old_thing.qml
OldThing 2.0 some_old_thing.qml

注意: 源 FunnySingleton.qml 文件必须已包含 pragma Singleton 语句。设置 QT_QML_SINGLETON_TYPE 源属性不会自动生成该语句。

pragma Singleton
import QtQml

QtObject {}

© 2024 The Qt Company Ltd. 本处包含的文档贡献是各自所有者的版权。本处提供的文档是根据自由软件基金会发布的 GNU 自由文档许可版 1.3 的条款许可的。Qt 及其相应标志为 The Qt Company Ltd. 在芬兰和/或世界其他国家的商标。所有其他商标均为其各自所有者的财产。