这将允许在不支持 openmp 的系统/编译器上安装data.table ,即使站点 Makeconf 文件定义了SHLIB_OPENMP_CFLAGS
。 从 R 3.4.0 开始,使用默认 clang 编译器的 macOS 就是这种情况。
类似以下内容就足够了,请注意ifeq
是 GNU make 扩展,因此需要在DESCRIPTION
中注明
```外壳
CXX11=$(shell "${R_HOME}"/bin/R CMD config CXX11)
ifeq ($(shell $(CXX11) -fopenmp -E -xc++ - 2>&1 >/dev/null && echo 'true'), true)
PKG_CFLAGS=$(SHLIB_OPENMP_CFLAGS)
PKG_LIBS=$(SHLIB_OPENMP_CFLAGS)
万一
此问题当前阻止在 Mac 上使用R
的开发版本使用data.table
$ ,这反过来又阻止了许多其他包,进而阻止了包的开发和更新:
> sessionInfo()
R Under development (unstable) (2017-05-26 r72742)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Sierra 10.12.5
Matrix products: default
BLAS: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRblas.0.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRlapack.dylib
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets
[6] methods base
loaded via a namespace (and not attached):
[1] compiler_3.5.0 tools_3.5.0
请注意,这仍然会导致问题(例如 R 社区上的这个新问题),特别是在 CRAN 尚未构建二进制文件的新版本之后。 现在您正在使用配置脚本(https://github.com/Rdatatable/data.table/pull/3951),可能值得将此测试添加到配置脚本中,以便编译将与本机 macOS 工具链一起使用(尽管没有并行化)。
@jimhester感谢您的注意。 我认为它已经与没有 openmp 的编译器一起工作,并且在此处的 CRAN_Release.cmd 中进行了检查: https://github.com/Rdatatable/data.table/blob/b2d618ce291a50872e10fc1ca7137faa8484005a/.dev/CRAN_Release.cmd#L183。 但显然我错了,这还不够。 我会试着理解你所说的和建议的。
我对用户声称 data.table 阻止任何东西感到有点沮丧。 这是MacOS的问题......为什么它默认不包含openmp? 这一切都可以在 Linux 和 Windows 上顺利运行。
最有用的评论
请注意,这仍然会导致问题(例如 R 社区上的这个新问题),特别是在 CRAN 尚未构建二进制文件的新版本之后。 现在您正在使用配置脚本(https://github.com/Rdatatable/data.table/pull/3951),可能值得将此测试添加到配置脚本中,以便编译将与本机 macOS 工具链一起使用(尽管没有并行化)。