指定CUDAToolkit_INCLUDE_DIR等变量无效,CMake无法找到CUDA组件
解决CMake查找CUDAToolkit失败的问题
问题重现
我的CMakeLists.txt内容如下:
cmake_minimum_required(VERSION 3.17) project(ProjectName) find_package(CUDAToolkit)
执行cmake ..时出现报错:
$ cmake .. -- Unable to find cuda_runtime.h in "/usr/share/cuda/include" for CUDAToolkit_INCLUDE_DIR. -- Unable to find cudart library. -- Could NOT find CUDAToolkit (missing: CUDA_CUDART) (found version "12.2.91") -- Configuring done (0.0s) -- Generating done (0.0s) -- Build files have been written to: /home/Geremia/Downloads
手动指定包含cuda_runtime.h的正确目录/usr/share/cuda/targets/x86_64-linux/include后,CMake仍未搜索该目录,报错相同:
$ cmake .. -DCUDAToolkit_INCLUDE_DIR=/usr/share/cuda/targets/x86_64-linux/include -- Unable to find cuda_runtime.h in "/usr/share/cuda/include" for CUDAToolkit_INCLUDE_DIR. -- Unable to find cudart library. -- Could NOT find CUDAToolkit (missing: CUDA_CUDART) (found version "12.2.91") -- Configuring done (0.0s) -- Generating done (0.0s) -- Build files have been written to: /home/Geremia/Downloads
指定CUDAToolkit_ROOT变量也无效果。
解决方案
创建标准路径软链接:CUDA默认依赖
/usr/local/cuda作为标准查找路径,若你的CUDA安装在/usr/share/cuda,手动创建软链接:sudo ln -s /usr/share/cuda /usr/local/cuda之后重新运行CMake即可。
同时指定头文件与库文件路径:单独指定
CUDAToolkit_INCLUDE_DIR可能无效,需同时指定库目录(假设cudart库在/usr/share/cuda/targets/x86_64-linux/lib):cmake .. -DCUDAToolkit_INCLUDE_DIR=/usr/share/cuda/targets/x86_64-linux/include -DCUDAToolkit_LIBRARY_DIR=/usr/share/cuda/targets/x86_64-linux/lib直接指定cudart库路径:跳过目录查找,直接给CMake指定库文件位置:
cmake .. -DCUDA_CUDART_LIBRARY=/usr/share/cuda/targets/x86_64-linux/lib/libcudart.so升级CMake版本:CMake 3.17对CUDA 12.x的支持不完善,升级到3.20及以上版本,新版优化了CUDAToolkit的查找逻辑,适配非标准安装路径。
在CMakeLists.txt中硬编码路径:避免每次执行cmake传参,修改配置文件:
cmake_minimum_required(VERSION 3.17) project(ProjectName) set(CUDAToolkit_INCLUDE_DIR "/usr/share/cuda/targets/x86_64-linux/include") set(CUDAToolkit_LIBRARY_DIR "/usr/share/cuda/targets/x86_64-linux/lib") find_package(CUDAToolkit REQUIRED)
内容的提问来源于stack exchange,提问作者Geremia
相关产品推荐
相关产品推荐

