You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CMake中引入shaders.qrc资源文件?

在CMake中配置Qt资源文件(等价于qmake的Resources += shaders.qrc)

我之前从qmake转CMake的时候也卡过这个点,其实Qt的CMake模块已经把资源文件的配置做得很直观了,跟qmake的写法对应起来特别清晰!

下面直接给你等价的配置步骤和示例:

1. 先确保正确引入Qt模块

不管是Qt5还是Qt6,首先得在CMakeLists.txt里找到对应的Qt包,比如你的项目用到Core和Widgets的话:

# Qt5写法
find_package(Qt5 REQUIRED COMPONENTS Core Widgets)

# Qt6写法
find_package(Qt6 REQUIRED COMPONENTS Core Widgets)

2. 核心配置:添加资源文件

对应的qmake Resources += shaders.qrc,在CMake里用qt_add_resources(Qt5.15+和Qt6通用)命令来实现,举个完整的项目配置例子:

# 创建可执行目标
add_executable(MyQtApp
    main.cpp
    mainwindow.cpp
    # 这里放你的其他源文件
)

# 关键:添加shaders.qrc资源
qt_add_resources(MyQtApp "shader_resources"
    PREFIX "/shaders"  # 可选:设置资源访问前缀,代码里就用:/shaders/xxx访问
    FILES shaders.qrc
)

# 链接Qt依赖库
target_link_libraries(MyQtApp PRIVATE Qt5::Core Qt5::Widgets)
# Qt6的话就是 Qt6::Core Qt6::Widgets

老版本CMake兼容写法(Qt5.15之前)

如果你的环境用的是比较老的Qt5版本,可能需要用qt5_add_resources命令:

# 先把资源文件打包成变量
qt5_add_resources(RESOURCE_FILES shaders.qrc)

# 把资源变量添加到可执行目标里
add_executable(MyQtApp
    main.cpp
    ${RESOURCE_FILES}
)

# 链接Qt库
target_link_libraries(MyQtApp PRIVATE Qt5::Core Qt5::Widgets)

3. 代码里访问资源的小提示

如果设置了PREFIX "/shaders",那么访问qrc里的文件时路径要加上前缀:

// 假设shaders.qrc里包含vertex.glsl
QFile shaderFile(":/shaders/vertex.glsl");
if (shaderFile.open(QIODevice::ReadOnly)) {
    QString shaderCode = shaderFile.readAll();
    // 后续编译shader逻辑
}

如果没设置前缀,直接用:/vertex.glsl就行。

注意事项

  • 确保shaders.qrc的路径是相对于当前CMakeLists.txt的,要是文件在子目录里,比如resources/shaders.qrc,记得写对路径
  • 如果你有多个qrc文件,直接在FILES后面追加就行,比如FILES shaders.qrc icons.qrc

内容的提问来源于stack exchange,提问作者lincong wang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:12:15