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++ 源代码——后者往往既耗时又占用大量内存。
请注意,由于 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 必须在链接到最终目标的所有资源中保持唯一。
这尤其会影响静态构建。在这种情况下,不同静态库中相同的资源名称会在使用该资源的目标中发生冲突。
与qmake 的 RESOURCES 不同,qt_add_resources 不会尝试使用qmlcachegen 编译任何 QML 或 JavaScript 文件。如需此功能,请使用qt_add_qml_module()。
另请参阅 qt_add_big_resources()。
© 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.