在安装R包时重写特定的编译器标志
我有一个R脚本,它尝试安装许多软件包(省略了所有内容,但只显示了一个): 然后我就跑在安装R包时重写特定的编译器标志,r,rscript,install.packages,R,Rscript,Install.packages,我有一个R脚本,它尝试安装许多软件包(省略了所有内容,但只显示了一个): 然后我就跑 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
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
。但是看起来
install.packages(“package\u name”)
方便,它将显示最新版本,并通过镜像等。还是有一种方便的方法您可以编辑.R/Makevars文件,并使用
+=
运算符附加所需的标志,例如
CFLAGS+= -O3 -Wall -mtune=native -march=native
如您在下面的评论中所说,如果存在冲突,则使用后一个标志。就从源代码编译而言,您可以通过install.packages()
,例如
install.packages("package_name", type = "source")
将这些标志添加到.R/Makevars文件不会覆盖所有标志,我也不希望它会导致任何问题。也许试一下,看看怎么样?如果出现错误,请进行相应调整。有趣的是,在我的Makevars中,我有
-g-O3-Wall-pedantic-std=gnu99-mtune=native-pipe
标志,并且对动物园软件包没有任何问题,尽管我使用的是macOS so YMMV()。@jared_mamrot感谢您的建议。我刚刚尝试在Makevars
中用CFLAGS=-O3-Wall-mtune=native-march=native安装zoo
。它替换了zoo
包中完全指定的所有CFLAG,该包指定了-O2-g-pipe-Wall-Wp,-D_-FORTIFY_SOURCE=2-feexceptions-fstack protector strong--param=ssp buffer size=4-grecord gcc switches-m64-mtune=generic
。我可以手动调整我的Makevars
,以获取剩余的标志。但这样做很痛苦,因为我有20多个软件包要安装。你知道如何自动“联合”这个CFLAGS
吗?事实上,我从你和这件事中得到了一些启发。我使用Makevars
将我的CFLAGS
附加到现有的CFLAGS
中,并期望gcc
在发生冲突时使用后一个标志(根据帖子)。谢谢
install.packages("package_name", type = "source")