Это позволит установить data.table в системах/компиляторах, которые не поддерживают openmp, даже если файл Makeconf сайта определяет SHLIB_OPENMP_CFLAGS
. Это относится к macOS начиная с R 3.4.0 с компилятором clang по умолчанию.
Что-то вроде следующего должно быть достаточно, обратите внимание, что ifeq
является расширением GNU make, поэтому его нужно будет отметить в вашем DESCRIPTION
``` оболочка
CXX11=$(оболочка "${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)
конец
Эта проблема в настоящее время блокирует использование data.table
на Mac с версией разработки R
, которая, в свою очередь, блокирует ряд других пакетов и, в свою очередь, разработку и обновление пакетов:
> 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 еще не создал двоичный файл. Теперь, когда вы используете скрипт configure (https://github.com/Rdatatable/data.table/pull/3951), возможно, стоит добавить этот тест в скрипт configure, чтобы компиляция работала с собственным набором инструментов 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 еще не создал двоичный файл. Теперь, когда вы используете скрипт configure (https://github.com/Rdatatable/data.table/pull/3951), возможно, стоит добавить этот тест в скрипт configure, чтобы компиляция работала с собственным набором инструментов macOS (хотя и без распараллеливание).