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

CMake构建C++20模块时找不到clang-scan-deps的问题求助

CMake构建C++20模块时clang-scan-deps无法找到的解决办法

问题详情

使用CMake构建C++20模块时,出现CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS-NOTFOUND错误,但终端中可正常执行clang-scan-deps命令,手动设置CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS变量也无效。

错误日志

~/coding/cpp-modules
> cmake --build ./build/Debug --target all
[1/8] Scanning /usr/include/vulkan/vulkan.cppm for CXX dependencies
FAILED: CMakeFiles/VulkanHppModule.dir/usr/include/vulkan/vulkan.cppm.o.ddi
"CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS-NOTFOUND" -format=p1689 -- /usr/bin/clang++-17   -g -std=gnu++20 -x c++ /usr/include/vulkan/vulkan.cppm -c -o CMakeFiles/VulkanHppModule.dir/usr/include/vulkan/vulkan.cppm.o -MT CMakeFiles/VulkanHppModule.dir/usr/include/vulkan/vulkan.cppm.o.ddi -MD -MF CMakeFiles/VulkanHppModule.dir/usr/include/vulkan/vulkan.cppm.o.ddi.d > CMakeFiles/VulkanHppModule.dir/usr/include/vulkan/vulkan.cppm.o.ddi.tmp && mv CMakeFiles/VulkanHppModule.dir/usr/include/vulkan/vulkan.cppm.o.ddi.tmp CMakeFiles/VulkanHppModule.dir/usr/include/vulkan/vulkan.cppm.o.ddi
/bin/sh: 1: CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS-NOTFOUND: not found
[2/8] Scanning /home/lastlost/coding/cpp-modules/main.cpp for CXX dependencies
FAILED: CMakeFiles/CppModulesTest.dir/main.cpp.o.ddi
"CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS-NOTFOUND" -format=p1689 -- /usr/bin/clang++-17   -g -std=gnu++20 -x c++ /home/lastlost/coding/cpp-modules/main.cpp -c -o CMakeFiles/CppModulesTest.dir/main.cpp.o -MT CMakeFiles/CppModulesTest.dir/main.cpp.o.ddi -MD -MF CMakeFiles/CppModulesTest.dir/main.cpp.o.ddi.d > CMakeFiles/CppModulesTest.dir/main.cpp.o.ddi.tmp && mv CMakeFiles/CppModulesTest.dir/main.cpp.o.ddi.tmp CMakeFiles/CppModulesTest.dir/main.cpp.o.ddi
/bin/sh: 1: CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS-NOTFOUND: not found
ninja: build stopped: subcommand failed.

终端验证clang-scan-deps可用

~/coding/cpp-modules
> clang-scan-deps --version
clang-scan-deps
Ubuntu LLVM version 17.0.6
  Optimized build.

解决方法

1. 配置阶段明确指定编译器及扫描工具路径

CMake可能无法自动关联clang++对应版本的clang-scan-deps,在cmake配置时直接指定完整路径:

# 先确认clang-scan-deps的实际路径
which clang-scan-deps
# 执行配置
cmake -S . -B build/Debug -DCMAKE_CXX_COMPILER=/usr/bin/clang++-17 -DCMAKE_CXX_COMPILER_CLANG_SCAN_DEPS=/usr/local/bin/clang-scan-deps

2. 升级CMake版本

CMake对C++20模块的扫描支持在3.28版本后更稳定,若当前CMake版本低于此,建议升级。检查版本命令:

cmake --version

3. 在CMakeLists.txt中强制指定路径

在项目的CMakeLists.txt开头添加以下代码,确保变量被正确设置:

set(CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS "/usr/local/bin/clang-scan-deps" CACHE PATH "Path to clang-scan-deps executable")

添加后删除旧构建目录,重新配置构建。

4. 验证工具版本匹配

确保clang++和clang-scan-deps版本一致,避免因版本不兼容导致的问题:

clang++-17 --version
clang-scan-deps --version

若版本不匹配,安装对应版本的LLVM工具链。

5. 清理缓存后重新构建

旧的构建缓存可能导致变量未更新,清理后重新配置:

rm -rf build/Debug
cmake -S . -B build/Debug -DCMAKE_CXX_COMPILER=/usr/bin/clang++-17 -DCMAKE_CXX_COMPILER_CLANG_SCAN_DEPS=$(which clang-scan-deps)
cmake --build build/Debug

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 09:35:59