OpenCV/CUDA项目CMake报错:缺失CUDAConfig.cmake
问题:CMake无法找到CUDAConfig.cmake
多次安装、卸载CUDA后,/usr/local/cuda/bin目录缺少CUDA 12.2应有的卸载脚本,且尝试多数论坛方法后,仍无法解决CMake配置问题,相关信息如下:
平台信息
- HP Omen 15
- Linux Ubuntu 22.04
- GeForce RTX 2070
- NVIDIA-SMI 535.54.03 - Driver Version: 535.54.03
- CUDA Version: 12.2
CMakeLists.txt内容
cmake_minimum_required(VERSION 3.27) project(synchronisation_buffer) # Set C++ Standards set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) # FIND LIBRARIES find_package(OpenCV REQUIRED) message(STATUS "OpenCV library status:") message(STATUS " version: ${OpenCV_VERSION}") message(STATUS " libraries: ${OpenCV_LIBS}") message(STATUS " include path: ${OpenCV_INCLUDE_DIRS}") find_package(CUDA REQUIRED) message(STATUS " libraries: ${CUDA_LIBS}") # INCLUDE HEADERS include_directories(${OpenCV_INCLUDE_DIRS}) # Target the only executable add_executable(${PROJECT_NAME} src/main.cpp src/main.hpp src/buffer.hpp )
.bashrc配置内容
# CUDA Bash links # export PATH=/usr/local/cuda/bin${PATH:+:${PATH}}$ # export LD_LIBRARY_PATH=/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}} export PATH=$PATH:/usr/local/cuda/bin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib:/usr/local/lib export CPLUS_INCLUDE_PATH=/usr/local/cuda/include
/usr/local目录内容
XXXX@XXXX-OMEN-Laptop-15-ek0xxx:/usr/local$ ls bin cuda cuda-12 cuda-12.2 doc etc games include lib man sbin share src
/usr/local/cuda/bin目录内容
XXXX@XXXX-OMEN-Laptop-15-ek0xxx:/usr/local/cuda/bin$ ls bin2c cudafe++ cuobjdump nsight_ee_plugins_manage.sh nsys-ui nvdisasm nvvp computeprof cuda-gdb fatbinary nsight-sys nvcc nvlink ptxas compute-sanitizer cuda-gdbserver ncu nsys __nvcc_device_query nvprof crt cu++filt ncu-ui nsys-exporter nvcc.profile nvprune
报错信息
-- The C compiler identification is GNU 11.3.0 -- The CXX compiler identification is GNU 11.3.0 -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working C compiler: /usr/bin/cc - skipped -- Detecting C compile features -- Detecting C compile features - done -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: /usr/bin/c++ - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done CMake Error at /usr/local/lib/cmake/opencv4/OpenCVConfig.cmake:86 (find_package): By not providing "FindCUDA.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by "CUDA", but CMake did not find one. Could not find a package configuration file provided by "CUDA" (requested version 12.2) with any of the following names: CUDAConfig.cmake cuda-config.cmake Add the installation prefix of "CUDA" to CMAKE_PREFIX_PATH or set "CUDA_DIR" to a directory containing one of the above files. If "CUDA" provides a separate development package or SDK, be sure it has been installed. Call Stack (most recent call first): /usr/local/lib/cmake/opencv4/OpenCVConfig.cmake:108 (find_host_package) CMakeLists.txt:11 (find_package) -- Configuring incomplete, errors occurred! make: *** No targets specified and no makefile found. Stop.
解决方案
1. 检查CUDA安装完整性
首先确认CUDA 12.2的CMake配置文件是否存在:
ls /usr/local/cuda-12.2/lib64/cmake/CUDA/CUDAConfig.cmake
如果文件不存在,说明CUDA Toolkit安装不完整,需要重新下载CUDA 12.2 runfile安装包,运行时勾选"CUDA Toolkit"选项(不要只安装驱动),确保完整安装。
2. 替换CMake中的CUDA查找方式
CMake 3.10+已弃用旧的find_package(CUDA)模块,推荐使用CUDAToolkit组件,修改CMakeLists.txt:
# 替换原有的find_package(CUDA REQUIRED) find_package(CUDAToolkit REQUIRED) message(STATUS " CUDA libraries: ${CUDAToolkit_LIBRARIES}") message(STATUS " CUDA include path: ${CUDAToolkit_INCLUDE_DIRS}") # 同时需要将CUDA库链接到目标 target_link_libraries(${PROJECT_NAME} PRIVATE ${CUDAToolkit_LIBRARIES})
3. 手动指定CUDA_DIR路径
如果确认CUDAConfig.cmake存在,可在CMake命令行中手动指定路径:
cmake .. -DCUDA_DIR=/usr/local/cuda-12.2/lib64/cmake/CUDA
或者在CMakeLists.txt开头添加:
set(CUDA_DIR "/usr/local/cuda-12.2/lib64/cmake/CUDA" CACHE PATH "Path to CUDAConfig.cmake directory")
4. 修复CUDA软链接
确保/usr/local/cuda软链接指向正确的CUDA版本:
# 先删除旧链接 sudo rm /usr/local/cuda # 建立新链接指向cuda-12.2 sudo ln -s /usr/local/cuda-12.2 /usr/local/cuda
5. 补充环境变量
在.bashrc中添加CMAKE_PREFIX_PATH:
export CMAKE_PREFIX_PATH=/usr/local/cuda-12.2:$CMAKE_PREFIX_PATH
执行source ~/.bashrc生效后,再重新运行CMake。
内容的提问来源于stack exchange,提问作者CXX_NVCC
相关产品推荐
相关产品推荐

