qt_add_resources

将二进制资源编译为源代码。

该命令在Qt6 软件包的Core 组件中定义,可按如下方式加载:

find_package(Qt6 REQUIRED COMPONENTS Core)

简介

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

基于变量的变体:

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

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

说明

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

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

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

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

基于目标的变量的参数

PREFIX 指定一个路径前缀,在此路径前缀下,C++ 代码可以访问该资源的所有文件。这与.qrc 文件格式的 XML 属性prefix 相对应。如果未给出PREFIX ,则使用目标属性QT_RESOURCE_PREFIX。自 Qt 6.5 起,PREFIX 是可选的。如果省略,且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++ Resource Compiler,因为编译 C++ Resource Compiler 会耗费大量时间和内存。

请注意,由于 CMake 的 Xcode 项目生成器的限制,BIG_RESOURCES 与 iOS 不兼容。详情请参见QTBUG-103497。此外,BIG_RESOURCES 只能在 CMake 3.17 以后的版本中可靠运行。

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

如果指定了DISCARD_FILE_CONTENTS ,资源文件将被添加到资源系统中,但不会嵌入其实际内容。相反,这些文件将作为空占位符存储在生成的资源中。

基于变量变量的参数

使用基于变量的变量时,您需要将一个或多个.qrc 文件作为参数传递。函数会根据这些 Qt 资源文件生成源代码,并将生成源文件的路径添加到指定变量中。

两种变量的参数

您可以设置应添加到rcc 调用中的其他OPTIONS 。您可以在rcc 文档中找到可能的选项。

示例

目标变量,使用直接资源:

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

变量变体,使用 .qrc 文件:

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

注意事项

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

这尤其会影响静态编译。在这种情况下,不同静态库中的相同资源名称会在消费目标中发生冲突。

qmakeRESOURCES 不同,qt_add_resources 不会尝试使用qmlcachegen 编译任何 QML 或 JavaScript 文件。为此请使用qt_add_qml_module

另请参阅 qt_add_big_resources()

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