如何使用 Cmake 在 Linux 上设置 MKL

Posted

技术标签:

【中文标题】如何使用 Cmake 在 Linux 上设置 MKL【英文标题】:How to set MKL on Linux with Cmake 【发布时间】:2019-11-01 23:22:40 【问题描述】:

我使用了此链接中提供的相同代码 How to setup MKL on linux with CMake

但是我收到了这个错误 找不到 MKL(缺少:MKL_LIBRARIES MKL_INCLUDE_DIRS

我尝试将 MKLROOT 设置为以下 SET(ENVMKLROOT "/home/usr/intel/mkl:$ENVMKLROOT")

这就是 findmkl.cmake 模块在没有为 mklroot 设置环境的代码行的情况下的样子(我在下面的链接中使用了相同的代码)

https://gist.github.com/scivision/5108cf6ab1515f581a84cd9ad1ef72aa

我怀疑问题出在设置 mklroot 但不确定,感谢任何帮助。

【问题讨论】:

【参考方案1】:

如果MKLROOT 最初未设置,则语句SET(ENVMKLROOT "/home/usr/intel/mkl:$ENVMKLROOT")MKLROOT 设置为等于/home/usr/intel/mkl:,这是不正确的路径格式。相反,您可以使用

set(ENVMKLROOT "/home/usr/intel/mkl")

或者,您可以在外部设置该环境变量的值,例如,

source /home/usr/intel/bin/compilervars.sh intel64

然后运行 ​​CMake。在这种情况下,不需要 CMake set 语句,这是一种更便携的解决方案。

更新:截至 2021 年 2 月 20 日,英特尔 MKL 中未提供 compilervars.sh,应使用以下命令设置环境:

source /opt/intel/oneapi/setvars.sh intel64

或安装 oneAPI 的任何位置。

【讨论】:

现在是 2021 年 2 月 20 日 compilervars.sh 不再在英特尔 MKL(一个 api)中提供。 mkl 存储在/opt/intel/oneapi 中。而不是/home/usr/intel/bin/compilervars.sh 应该使用source /opt/intel/oneapi/setvars.sh intel64 @Jubick 谢谢!我进行了编辑。同时保留原始答案,因为这与原始问题相对应,并且仍然与旧版本相关。

以上是关于如何使用 Cmake 在 Linux 上设置 MKL的主要内容,如果未能解决你的问题,请参考以下文章

Linux CentOS 7上的CMake,如何强制系统使用cmake3?

cmake交叉编译的使用

如何让 CMake 在 Windows 上找到 google protobuf?

如何使用CMake构建c++项目

C++学习(二五六)CMakelist.txt和Android.mk

Android.mk转Android.bp