Переопределение определенных флагов компилятора при установке пакетов R

У меня есть сценарий R, который пытается установить много пакетов (все пропущены, кроме одного):

install.packages("zoo")

Тогда я бегу

Rscript my_r.r

Затем я заметил, что он попытается скомпилировать код на C:

gcc -m64 -std=gnu99 -I"/usr/include/R" -DNDEBUG -I../inst/include -I"/latest/rsg_comm/r_packages/zoo/include" -I/usr/local/include  -fpic  -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches   -m64 -mtune=generic  -c any.c -o any.o

Есть ли способ попросить, чтобы все пакеты были скомпилированы локально с -O3 и -mtune=native?

Я заметил, что есть аналогичное сообщение, в котором предлагается использовать ~/R/.Makevars. Но похоже

  1. он переопределит все флаги компилятора, а не только те 2, которые я указал. Есть возможность указать?
  2. Мне нужно загрузить исходный код каждого источника, что не так удобно, как просто использовать install.packages("package_name"), который будет определять последнюю версию, проходить через зеркало и т. Д. Или есть удобный способ?

person HCSF    schedule 24.02.2021    source источник
comment
Добавление этих флагов в файл .R / Makevars не отменяет все флаги, и я не ожидал, что это вызовет какие-либо проблемы. Может попробовать и посмотреть, как пойдет? Если вы получаете ошибки, отрегулируйте соответственно. Как ни странно, в моих Makevars у меня есть -g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe флаги и нет проблем с пакетом zoo, хотя я использую macOS, поэтому YMMV (stackoverflow .com / a / 65334247/12957340).   -  person jared_mamrot    schedule 16.03.2021
comment
@jared_mamrot благодарит за ваше предложение. Я просто пробовал установить zoo с CFLAGS= -O3 -Wall -mtune=native -march=native в Makevars. Он заменил все CFLAGS, полностью указанные в пакете zoo, который указывает -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic. Я мог бы вручную настроить свой Makevars, чтобы включить оставшиеся флаги. Но это болезненно, так как мне нужно установить 20+ пакетов. Есть идеи, как автоматически объединить CFLAGS?   -  person HCSF    schedule 16.03.2021
comment
На самом деле я получил некоторое вдохновение от вас и от этого сообщения. Я использую Makevars, чтобы добавить свой CFLAGS к существующему CFLAGS, и ожидаю, что gcc примет последний флаг в случае конфликта (согласно сообщению). Спасибо!   -  person HCSF    schedule 16.03.2021


Ответы (1)


Вы можете отредактировать файл .R / Makevars и добавить желаемые флаги с помощью оператора +=, например

CFLAGS+= -O3 -Wall -mtune=native -march=native

Последний флаг используется, если есть конфликт, как вы сказали в своем комментарии ниже. Что касается компиляции из исходного кода, вы можете сделать это через install.packages(), например.

install.packages("package_name", type = "source")
person jared_mamrot    schedule 17.03.2021