CMake检测到CUDA包但CMAKE_CUDA_COMPILER为false问题求助
问题原因
- 编译器版本不兼容:你使用的CUDA 10.2最高仅支持GCC 8版本主机编译器,而日志显示你的C/C++编译器为GNU 9.4.0。
check_language(CUDA)会执行严格的编译器兼容性校验,尝试编译测试CUDA程序时会因版本不兼容报错,因此判定CUDA编译器不可用,将CMAKE_CUDA_COMPILER设为false。而后续调用的旧版FindCUDA模块仅搜索CUDA Toolkit安装路径,不做编译有效性校验,因此可以正常识别到/usr/local下的CUDA 10.2安装。 - 环境变量加载异常:你将CUDA路径配置在
.bashrc中,若你使用sudo执行CMake、通过GUI启动IDE执行编译、或终端未加载.bashrc配置,check_language(CUDA)搜索系统默认路径时无法找到nvcc,就会返回查找失败。 - CMake缓存残留:如果之前执行CMake时已经生成过
CMAKE_CUDA_COMPILER=NOTFOUND的缓存记录,后续未清理缓存直接重新执行CMake时,会直接复用旧的缓存结果,不会重新搜索CUDA编译器。
解决方案
- 处理编译器兼容问题,可二选一:
- 降级主机编译器到GCC 8,执行命令安装并在编译时指定:
sudo apt install gcc-8 g++-8 cmake .. -DCMAKE_C_COMPILER=gcc-8 -DCMAKE_CXX_COMPILER=g++-8 - 新增nvcc兼容参数忽略版本校验,在CMakeLists的
enable_language(CUDA)前添加如下配置:set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -allow-unsupported-compiler")
- 降级主机编译器到GCC 8,执行命令安装并在编译时指定:
- 显式指定CUDA编译器路径,避免环境变量加载问题,执行CMake时添加参数:
cmake .. -DCMAKE_CUDA_COMPILER=/usr/local/cuda-10.2/bin/nvcc - 清理旧缓存后重新编译,先删除构建目录下的
CMakeCache.txt文件和CMakeFiles文件夹,再重新执行cmake命令。
内容的提问来源于stack exchange,提问作者Alex Pander
相关产品推荐
相关产品推荐

