如何在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
相关产品推荐
相关产品推荐

