为 CRAN 做准备:'-fopenmp' clang 错误?

Preparing for CRAN: '-fopenmp' clang error?

我正在准备一个包(使用 Rcpp 和 RcppArmadillo)提交给 CRAN。我正在使用 Travis CI 并且包含以下内容以更彻底地测试我的包:

os:
  - linux
  - osx
compiler:
  - clang
  - gcc

但是,当在 OS X

上使用 clang 时,这会产生(看起来很熟悉)错误
* installing *source* package ‘my_pkg’ ...
** libs
clang++  -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG  -I"/Users/travis/R/Library/Rcpp/include" -I"/Users/travis/R/Library/RcppArmadillo/include" -I/usr/local/include  -fopenmp  -fPIC  -Wall -g -O2  -c RcppExports.cpp -o RcppExports.o
clang: error: unsupported option '-fopenmp'
make: *** [RcppExports.o] Error 1
ERROR: compilation failed for package ‘pkg’
* removing ‘/Users/travis/build/my_user/pkg/pkg.Rcheck/pkg’

通过适当调整我的 travis.yml 文件以遵循建议的解决方法之一 here,看来我可以避免该问题。

我的问题是:如果我想把它放到CRAN上怎么办? Jim 的建议在我看来只是本地的,我是否必须在我的包中做一些事情来自动避免用户的编译问题才能被 CRAN 接受?

编辑:更具体一点,我可以将 CXX=g++ 放在 Makevars 中,还是不受欢迎(这就足够了)?

所以...请一次一个步骤。您在这里使用哪个 RcppArmadillo 版本?您要使用哪个 clang 版本?那个 clang 版本来自哪里?它有 OpenMP 支持吗?

previous 版本的 RcppArmadillo 开始,我们确保在 macOS 上简单地关闭 OpenMP off,因为构建支持太脆弱了,参见 this PR on GitHub。因此,您可能必须删除 unconditional 在您的文件中使用 -fopenmp,或者简单地不使用 Matrix 的 "cell"(即 clang && macOS)。

否则,answer by Jim Hester 是正确的。在 macOS 上工作更多。