CMake查找GLSLang库报错:缺失SPIRV-Tools-opt目标如何解决?
问题:CMake查找GLSLang库时缺失SPIRV-Tools-opt目标
我近期下载并编译了GLSLang库用于项目开发,但使用find_package(glslang REQUIRED)查找该库时,出现缺失SPIRV-Tools-opt目标的错误。我查看了glslang-targets.cmake文件,发现部分目标的INTERFACE_INCLUDE_DIRECTORIES被设置为不存在的install/include/External路径,但我认为这与缺失SPIRV-Tools-opt目标无关。我还尝试使用find_package(SPIRV-Tools-opt REQUIRED)进行查找,同样未能成功。请问如何通过CMake正确查找并引入GLSLang库?我是否遗漏了某些步骤或操作有误?
错误信息
GLSLang查找错误
[cmake] CMake Error at MyProject/CMakeLists.txt:183 (find_package): [cmake] Found package configuration file: [cmake] [cmake] Path to glslang-config.cmake [cmake] [cmake] but it set glslang_FOUND to FALSE so package "glslang" is considered to be [cmake] NOT FOUND. Reason given by package: [cmake] [cmake] The following imported targets are referenced, but are missing: [cmake] SPIRV-Tools-opt
SPIRV-Tools-opt查找错误
[cmake] By not providing "FindSPIRV-Tools.cmake" in CMAKE_MODULE_PATH this project [cmake] has asked CMake to find a package configuration file provided by [cmake] "SPIRV-Tools", but CMake did not find one. //For some reason it says SPIRV-Tools and not SPIRV-Tools-opt.
解决方案
1. 确认编译GLSLang时的组件配置
GLSLang默认编译可能不会包含所有SPIRV-Tools组件,编译时需明确开启对应CMake选项:
- 编译时添加
-DENABLE_SPIRV_TOOLS=ON和-DENABLE_SPIRV_TOOLS_OPT=ON参数,确保SPIRV-Tools-opt被编译并安装。 - 若使用KhronosGroup的官方仓库,需确保依赖子模块拉取完整:
克隆时加--recursive参数:
已克隆的仓库执行:git clone --recursive https://github.com/KhronosGroup/glslang.gitgit submodule update --init --recursive
2. 配置CMake路径识别
- 确保GLSLang和SPIRV-Tools安装到CMake可识别的路径,或在
find_package前指定前缀路径:
本地编译未安装到系统路径时,必须明确指定前缀路径,否则CMake无法找到配置文件。set(CMAKE_PREFIX_PATH "/path/to/glslang/install;/path/to/spirv-tools/install" ${CMAKE_PREFIX_PATH}) find_package(glslang REQUIRED)
3. 修复glslang-targets.cmake的路径问题(可选)
虽然你认为路径问题与目标缺失无关,但错误的INCLUDE路径可能引发隐性配置错误:
- 将
install/include/External替换为实际的SPIRV-Tools头文件路径。 - 或编译GLSLang时通过
-DCMAKE_INSTALL_PREFIX指定正确安装路径,避免生成错误路径配置。
4. 手动指定SPIRV-Tools-opt目标(备选)
若find_package(glslang)始终失败,可尝试单独配置SPIRV-Tools-opt:
add_library(SPIRV-Tools-opt STATIC IMPORTED) set_target_properties(SPIRV-Tools-opt PROPERTIES IMPORTED_LOCATION "/path/to/spirv-tools/install/lib/libSPIRV-Tools-opt.a" # 替换为对应平台的库文件 INTERFACE_INCLUDE_DIRECTORIES "/path/to/spirv-tools/install/include" )
内容的提问来源于stack exchange,提问作者xarxarx
相关产品推荐
相关产品推荐

