【问题标题】:Override Specific Compiler Flags When Installing R Packages安装 R 包时覆盖特定的编译器标志
【发布时间】: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。不过好像

  1. 它将覆盖所有编译器标志,而不仅仅是我指定的那些 2。有没有办法指定?
  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 中安装zooCFLAGS= -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


【解决方案1】:

您可以编辑 .R/Makevars 文件并使用 += 运算符附加所需的标志,例如

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

如您在下面的评论中所说,如果存在冲突,则使用后一个标志。从源代码编译方面,您可以通过install.packages() 进行此操作,例如

install.packages("package_name", type = "source")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    相关资源
    最近更新 更多