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

