【发布时间】:2021-05-26 13:14:07
【问题描述】:
我有一个 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 文件不会覆盖所有标志,我不认为它会导致任何问题。也许尝试一下,看看效果如何?如果出现错误,请进行相应调整。有趣的是,在我的 Makevars 中,我有
-g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe标志,并且 zoo 包没有问题,尽管我在 macOS 上所以 YMMV (stackoverflow.com/a/65334247/12957340)。 -
@jared_mamrot 感谢您的建议。我只是尝试在
Makevars中安装zoo和CFLAGS= -O3 -Wall -mtune=native -march=native。它替换了在zoo包中完全指定的所有CFLAGS,它指定了-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吗? -
其实我从你和这个post那里得到了一些启发。我使用
Makevars将我的CFLAGS附加到现有的CFLAGS并期望gcc如果发生冲突(根据帖子)将采用后一个标志。谢谢!
标签: r rscript install.packages