qt_add_resources

将二进制资源编译到源代码中。

该命令定义在 Qt6 包的 Core 组件中,可以通过以下方式加载

find_package(Qt6 REQUIRED COMPONENTS Core)

摘要

qt_add_resources(<VAR> file1.qrc [file2.qrc ...]
                  [OPTIONS ...])

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

自 6.0 版本起

qt_add_resources(<TARGET> <RESOURCE_NAME>
                  [PREFIX <PATH>]
                  [LANG <LANGUAGE>]
                  [BASE <PATH>]
                  [BIG_RESOURCES]
                  [OUTPUT_TARGETS <VARIABLE_NAME>]
                  [FILES ...] [OPTIONS ...])

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

描述

要添加资源,可以将变量名或目标作为命令的第一个参数传递。

当传递变量名作为第一个参数时,qt_add_resources 使用 资源编译器 (rcc) 从 Qt 资源文件中创建源代码。生成的源文件的路径添加到 <VAR>

当传递目标作为第一个参数时,该函数会创建一个名为 RESOURCE_NAME 的资源,其中包含指定的 FILES。资源将自动链接到 TARGET

有关 Qt 资源的一般描述,请参阅 Qt 资源系统

基于目标的变体参数

PREFIX 指定一个路径前缀,所有资源的文件都可通过 C++ 代码从该前缀访问。这对应于 .qrc 文件格式的 XML 属性 prefix。如果没有指定 PREFIX,则使用目标属性 QT_RESOURCE_PREFIX。自 6.5 起可选。如果省略并且没有由 QT_RESOURCE_PREFIX 指定,则将使用默认路径前缀 "/"

LANG 指定此资源的地区。这对应于 .qrc 文件格式的 XML 属性 lang

BASE 是一个表示文件别名根点的路径前缀。例如,如果 BASE"assets",而 FILES"assets/images/logo.png",则该文件的别名为 "images/logo.png"

需要通过 QT_RESOURCE_ALIAS 源文件属性设置文件的别名设置。

可以指定 BIG_RESOURCES 以启用对大资源的支持。这将直接生成对象文件(.o.obj),而不是 C++ 源代码。这允许嵌入较大的资源,而无需编译生成的 C++ 源代码,这可能会非常耗时和占用大量内存。

请注意,由于 CMake 的 Xcode 项目生成器的限制,BIG_RESOURCES 与 iOS 不兼容。有关详细信息,请参阅 QTBUG-103497。此外,BIG_RESOURCES 从 CMake 3.17 开始才可靠工作。

当使用此命令与静态库一起时,将生成一个或多个特殊目标。如果您想对这些目标进行额外的处理,请向 OUTPUT_TARGETS 参数传递一个变量名。qt_add_resources 函数将特殊目标的名称存储在指定的变量中。

两种变体的参数

您可以为 rcc 调用添加额外的 OPTIONS。您可以在 rcc 文档 中找到可能的选择。

示例

变量版本,使用 .qrc 文件

set(SOURCES main.cpp)
qt_add_resources(SOURCES example.qrc)
qt_add_executable(myapp ${SOURCES})

目标版本,使用即时资源

qt_add_executable(myapp main.cpp)
qt_add_resources(myapp "images"
    PREFIX "/images"
    FILES image1.png image2.png)

注意事项

当添加多个资源时,RESOURCE_NAME 必须在所有链接到最终目标的资源中是唯一的。

这特别影响静态编译。在那里,不同的静态库中的相同资源名与消耗目标冲突。

另请参阅 qt_add_big_resources().

© 2024 Qt 公司有限公司。本文档中包含的贡献是各自所有者的版权。提供的文档是在 GNU 自由文档许可证版本 1.3 的条款下许可的,由自由软件基金会发布。Qt 及其相关标志是芬兰及/或在全世界其他地区 Qt 公司的商标。所有其他商标均为其各自所有者的财产。