安装 R 包时覆盖特定的编译器标志
Override Specific Compiler Flags When Installing R Packages
我有一个 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
?
我注意到有一个 similar post 建议使用 ~/R/.Makevars
。不过好像
- 它将覆盖所有编译器标志,而不仅仅是我指定的那些 2 个。有办法指定吗?
- 我要下载每个源的源码包,还不如直接用
install.packages("package_name")
方便,会算最新版本,还要通过镜像等。或者有方便的方式?
您可以编辑 .R/Makevars 文件并使用 +=
运算符附加所需的标志,例如
CFLAGS+= -O3 -Wall -mtune=native -march=native
如您在下面的评论中所说,如果存在冲突,则使用后一个标志。在从源代码编译方面,您可以通过 install.packages()
执行此操作,例如
install.packages("package_name", type = "source")
我有一个 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
?
我注意到有一个 similar post 建议使用 ~/R/.Makevars
。不过好像
- 它将覆盖所有编译器标志,而不仅仅是我指定的那些 2 个。有办法指定吗?
- 我要下载每个源的源码包,还不如直接用
install.packages("package_name")
方便,会算最新版本,还要通过镜像等。或者有方便的方式?
您可以编辑 .R/Makevars 文件并使用 +=
运算符附加所需的标志,例如
CFLAGS+= -O3 -Wall -mtune=native -march=native
如您在下面的评论中所说,如果存在冲突,则使用后一个标志。在从源代码编译方面,您可以通过 install.packages()
执行此操作,例如
install.packages("package_name", type = "source")