如何通过CMake使GLSL着色器文件显示在Visual Studio解决方案资源管理器中
解决CMake生成VS解决方案时GLSL文件不显示的问题
问题根源
你当前的代码仅完成了文件匹配和分组声明,但没有将这些GLSL文件添加到项目的目标(可执行文件/库)中——CMake只会把被add_executable或add_library包含的文件纳入Visual Studio解决方案,source_group仅负责给已纳入的文件做分组展示,无法凭空添加未被关联的文件。
修复后的代码示例
# 匹配当前目录及所有子目录下的.glsl文件(仅当前目录用GLOB即可) file(GLOB_RECURSE SHADER_FILES *.glsl) # 将着色器文件添加到你的项目目标中(替换成你的实际目标名,比如MyGame) add_executable(MyGame main.cpp renderer.cpp # 其他项目源文件... ${SHADER_FILES} # *关键步骤:将着色器纳入项目范围* ) # 为着色器文件创建自定义分组,在VS解决方案资源管理器中显示为"Shaders" source_group("Shaders" FILES ${SHADER_FILES})
额外提示
- 如果
file(GLOB)未匹配到文件:检查路径是否正确,比如着色器在shaders/子目录,就改成file(GLOB SHADER_FILES shaders/*.glsl);使用GLOB_RECURSE可递归查找所有子目录下的.glsl文件。 - 若不想让着色器参与编译(仅在VS中显示),可添加以下代码标记文件类型:
set_source_files_properties(${SHADER_FILES} PROPERTIES HEADER_FILE_ONLY TRUE) - 建议用
CMAKE_CURRENT_SOURCE_DIR指定绝对路径,避免路径解析问题:file(GLOB_RECURSE SHADER_FILES ${CMAKE_CURRENT_SOURCE_DIR}/shaders/*.glsl)
内容的提问来源于stack exchange,提问作者Void
相关产品推荐
相关产品推荐

