官方 CRAN R 包能否依赖英特尔 MKL 和 CMake? (和检查?)

Can an official CRAN R package depend on Intel MKL and CMake? (and Check ?)

在我的 R 包中,我有 C 代码,它使用 Intel MKL (and an open source library for C unit testing). I use CMake to build the C code. I also have Rcpp 接口代码,我用它来从 R 调用 C 代码。

我想知道 CRAN 是否会接受这个软件包,因为您必须在系统上安装 Intel MKL 和 CMake 才能工作?

我不太担心单元测试,我总能摆脱它,但我绝对需要英特尔 MKL,因为我使用的是特定于 MKL 的线性代数例程,例如稀疏矩阵-密集矩阵相乘等

我需要 CMake 的原因是因为目前我正在使用它从 C 代码构建静态库并操作包的 src 文件夹中的 Makevars 文件,以便我可以 link 针对 C 库的 Rcpp 接口代码。

我的 Makevars 看起来如下:

PKG_CPPFLAGS=-I/usr/local/lib/R/site-library/Rcpp/include -I/opt/intel/compilers_and_libraries_2019.4.243/linux/mkl/include -I./C
PKG_LIBS=-L./C/cmake-build-release -lbcd -llog -Wl,--start-group /opt/intel/compilers_and_libraries_2019.4.243/linux/mkl/lib/intel64/libmkl_intel_ilp64.a /opt/intel/compilers_and_libraries_2019.4.243/linux/mkl/lib/intel64/libmkl_sequential.a /opt/intel/compilers_and_libraries_2019.4.243/linux/mkl/lib/intel64/libmkl_core.a -Wl,--end-group -lpthread -lm -ldl 

这适用于 Ubuntu,但我担心 OS X,尤其是 Windows。例如,here 有人声称英特尔 MKL 与 minGW 不兼容。

我知道有许多使用 MKL 或 CMake 的 CRAN 包。但对于我调查过的那些,MKL 用作可选的 BLAS 库,CMake 用于构建 inst 文件夹下的内容,这不依赖于外部库。我查看了 writing R extensions and also the CRAN submission page 但找不到答案。我认为既然有越来越多的人对将 CMake 和 MKL 与 R 一起使用感兴趣,那么有一个 SO post 会很好。

看来你把事情搞错了。

您创建了一个范围更窄、更专业的解决方案(MKL、CMake)。

现在你担心它可能太专业了。你走在正确的道路上。首先,CMake 被其他包使用,因此您可以将其声明为 SystemRequirements:。其次,MKL 更难但......也真正专业。

我认为 更广泛的 CRAN 上传 的一般建议是

  • 放宽您的代码要求:如果存在则使用 MKL,但在不存在时提供回退;现在您不再需要 MKL
  • CMake 同上:保留它并依赖它,最好还是尽量不要要求它,因为大多数 15000 个其他 CRAN 包也不需要它。

点击这两项后,您就可以进行 CRAN 上传了。如果这一切看起来很繁琐,请坚持使用 GitHub 存储库或 drat 存储库。