cmake 使用nvcc 对ccmpred进行编译时出现的问题

问题1描述:

在使用根据CCMpred 源码提供的CMakeLists.txt 文件进行编译时报了一条关键错误(更详细的请看第二个报错信息)。

Could NOT find CUDA (missing: CUDA_INCLUDE_DIRS) (found version "11.1")

提示我找不到CUDA,但是我又想要安装使用nvcc编译的CCMpred,毕竟在GPU上运行的速度比CPU上快多了。

(base) username@node8:~/workspace/CCMpred$ cmake .
-- MsgPack was not found. Make sure MSGPACK_LIBRARY and MSGPACK_INCLUDE_DIR are set.
-- Could NOT find LibUUID (missing: UUID_LIBRARY UUID_INCLUDE_DIR) 
CMake Deprecation Warning at lib/libconjugrad/CMakeLists.txt:11 (cmake_policy):
  The OLD behavior for policy CMP0022 will be removed from a future version
  of CMake.

  The cmake-policies(7) manual explains that the OLD behaviors of all
  policies are deprecated and that a policy should be set to OLD only under
  specific short-term circumstances.  Projects should be ported to the NEW
  behavior and not rely on setting a policy to OLD.


-- Could NOT find CUDA (missing: CUDA_INCLUDE_DIRS) (found version "11.1")
-- Configuring done
-- Generating done
-- Build files have been written to: /home/jianquanzhao/workspace/CCMpred
原因分析

cmake无法自己找到nvcc的路径,所以需要我们自己进行指定
通过查看

cmake官网关于在计算机上查找CUDA的说明
找到了解决的办法

解决方案
  1. 在CMakeLists.txt前面几行自己输入你服务器或者是自己电脑上的CUDA-toolkit的安装路径(如代码中的最后一行所示)
cmake_minimum_required (VERSION 3.8)
include(CheckLanguage)

project (CCMpred)
set(CCMPRED_MAJOR_VERSION 0)
set(CCMPRED_MINOR_VERSION 3)
set(CCMPRED_PATCH_VERSION 3)

set(CUDA_TOOLKIT_ROOT_DIR /usr/local/cuda-11.1)
  1. 如果不需要GPU版本的
    那么只需要在使用cmake编译的时候指定参数为
(base) username@node8:~/workspace/CCMpred$ cmake -DWITH_CUDA=OFF .

问题2描述

在cmake 没有报错信息之后,使用make出现错误

(base) username@node8:~/workspace/CCMpred$ make
[ 30%] Built target conjugrad
[ 35%] Building CUDA object CMakeFiles/ccmpred.dir/src/evaluate_cuda_kernels.cu.o
nvcc fatal   : Unknown option '-fopenmp'
CMakeFiles/ccmpred.dir/build.make:326: recipe for target 'CMakeFiles/ccmpred.dir/src/evaluate_cuda_kernels.cu.o' failed
make[2]: *** [CMakeFiles/ccmpred.dir/src/evaluate_cuda_kernels.cu.o] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/ccmpred.dir/all' failed
make[1]: *** [CMakeFiles/ccmpred.dir/all] Error 2
Makefile:151: recipe for target 'all' failed
make: *** [all] Error 2
原因分析

分析不出来

解决方案

参考了这篇csdn文章https://dablelv.blog.csdn.net/article/details/50378209
选择在cmake编译之后的Makefile的前面几行增加

CXX=nvcc
CXXFLAGS=-g -Xcompiler -fopenmp -DDEBUG

问题3描述

在解决了上述两个问题之后又又又又出现问题了(cmake 没有报错了,但是…)
使用make进行项目构建时报错如下

[ 57%] Building C object CMakeFiles/ccmpred.dir/src/evaluate_cpu.c.o
[ 63%] Building C object CMakeFiles/ccmpred.dir/src/parseopt.c.o
[ 68%] Building C object CMakeFiles/ccmpred.dir/src/reweighting.c.o
[ 73%] Building C object CMakeFiles/ccmpred.dir/src/numdif.c.o
[ 78%] Building C object CMakeFiles/ccmpred.dir/src/meta.c.o
[ 84%] Building C object CMakeFiles/ccmpred.dir/src/evaluate_cuda.c.o
[ 89%] Building CUDA object CMakeFiles/ccmpred.dir/src/evaluate_cuda_kernels.cu.o
nvcc fatal   : Unknown option '-pthread'
CMakeFiles/ccmpred.dir/build.make:302: recipe for target 'CMakeFiles/ccmpred.dir/src/evaluate_cuda_kernels.cu.o' failed
make[2]: *** [CMakeFiles/ccmpred.dir/src/evaluate_cuda_kernels.cu.o] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/ccmpred.dir/all' failed
make[1]: *** [CMakeFiles/ccmpred.dir/all] Error 2
Makefile:151: recipe for target 'all' failed
make: *** [all] Error 2
原因分析

通过查找最终在StackOverflow找到了解释链接
其实就是cmake版本太低导致的

解决方案
  1. 确定一下是不是这个原因
(AF2) username@hostname:~/download/CCMpred$ cmake --version
cmake version 3.10.2

高兴哭了,真的是

  1. 安装cmake(装都装了,必须装最新版的,大家需要自行找适合自己的版本)
(AF2) username@hostname:~/download$ wget https://github.com/Kitware/CMake/releases/download/v3.22.3/cmake-3.22.3.tar.gz
(AF2) username@hostname:~/download$ tar -xf cmake-3.22.3.tar.gz
(AF2) username@hostname:~/download$ cd cmake-3.22.3/
(AF2) username@hostname:~/download/cmake-3.22.3$ ./bootstrap
(AF2) username@hostname:~/download/cmake-3.22.3$ make

然后使用cmake的时候使用当前路径下的bin/cmake就好了,不要再使用默然路径中的cmake了(针对服务器,如果是本地的话,可以考虑直接把默认路径中的cmake更换成新装的这个)

  1. 妥了
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值