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_CACHEGEN
和NO_LINT
选项也与qt_add_qml_module()具有相同的作用。它们禁用了使用QML_FILES
列出的文件的字节码编译和lint处理。此行为也可以仅针对单个文件使用源文件属性进行指定。
NO_QMLDIR_TYPES
禁止将QML_FILES
添加到生成的qmldir文件中作为类型。
RESOURCES
具有与qt_add_qml_module()命令中的RESOURCES选项完全相同的作用。它提供了要添加到target
中的普通资源的文件列表。这些文件通常是QML代码以某种方式引用的东西,例如图像、着色器等。
通过QML_FILES
或RESOURCES
添加到模块中的文件将与通过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_FILES
或 RESOURCES
列出的所有文件都会添加到 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. 在芬兰和/或世界其他国家的商标。所有其他商标均为其各自所有者的财产。