Cmake项目注意事项(darknet)

在编译cmake项目中 容易跳坑事项:

本人菜鸟在cmake项目中踩坑无数,环境配置问题数不胜数,菜鸟经常被折磨得体无完肤,究其原因是不懂cmake编译所致,经过多次踩坑。总结到。环境配置需要对cmakerlist以及FindXXX.cmake相对应。

以Darknet为例:

在目前版本,FindCUDNN.cmake 中 

find_path(CUDNN_INCLUDE_DIR NAMES cudnn.h cudnn_v8.h cudnn_v7.h
  HINTS $ENV{CUDA_PATH} $ENV{CUDA_TOOLKIT_ROOT_DIR} $ENV{CUDA_HOME} $ENV{CUDNN_ROOT_DIR} $ENV{CUDNN_ROOT_DIR} /usr/include
  PATH_SUFFIXES cuda/include include)

if(WIN32)
  set(CUDNN_DLL_DIR ${CUDNN_INCLUDE_DIR})
  list(TRANSFORM CUDNN_DLL_DIR APPEND "/../bin")
  find_file(CUDNN_LIBRARY_DLL NAMES cudnn64_${CUDNN_VERSION_MAJOR}.dll PATHS ${CUDNN_DLL_DIR})
endif()

经常会出现配置之后找不到cuda或者cudnn皆是因为 配置的环境变量 不满足cmake搜索条件。究其原因 是因为CUDNN_DLL_DIR的搜索路径并不是dll所在路径  使用message显示:

message(STATUS "CUDNN_DLL_DIR: ${CUDNN_DLL_DIR}" )

cmake显示为

CUDNN_DLL_DIR: C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v12.5/include/../bin

发现搜索路径出现问题  遂将:

  set(CUDNN_DLL_DIR ${CUDNN_INCLUDE_DIR})
  list(TRANSFORM CUDNN_DLL_DIR APPEND "/../bin")

两行命令更换为

  set(CUDNN_DLL_DIR $ENV{CUDNN_ROOT_DIR}/bin)

其中

 find_file(CUDNN_LIBRARY_DLL NAMES cudnn64_${CUDNN_VERSION_MAJOR}.dll PATHS ${CUDNN_DLL_DIR})

中CUDNN_VERSION_MAJOR变量名引用错误 ,导致查找无法找到cudnn64_x.dll 将其更改为

_CUDNN_VERSION_MAJOR 即可

其中$ENV{CUDNN_ROOT_DIR}/bin 为dll的所在路径。本人在环境变量中添加的CUDNN_ROOT_DIR变量, 读者可以根据自己的设定进行修改

在通过message显示:

message(STATUS "CUDNN_DLL_DIR: ${CUDNN_DLL_DIR}" )

cmake显示正常:

CUDNN_DLL_DIR: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.5/bin

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值