【问题标题】:How to override compilers used by R?如何覆盖 R 使用的编译器?
【发布时间】:2021-09-28 07:23:41
【问题描述】:

当我尝试从源代码编译 R 包时,它使用 R 安装目录中 etc/Makeconf 中定义的编译器和设置。如何覆盖这些设置?

我有一个~/.R/Makevars 文件(建议例如here),我在其中包含了我想要的设置,但由于某种原因这些设置没有被使用。为什么不呢,我该如何解决这个问题?

我在~/.R/MakevarsMakeconf 上找不到官方文档——欢迎提供链接。

在过去,这个相同的设置曾经对我正常工作,但最近却不行。我认为最近的 R 版本一定发生了一些变化,但我不确定什么时候。最近是否有任何变化可能会对此产生影响?


动机和背景:

我在 macOS 上,我想使用来自 MacPorts 的gfortran。因此我在~/.R/Makevars 中设置了FC = /opt/local/bin/gfortran-mp-11FLIBS = -L/opt/local/lib/gcc11 -lgfortran -lquadmath -lm。但是,系统仍然想在/usr/local 中使用gfortran 安装,而我的机器上不存在该安装。它显然采用了来自etc/Makeconf 的路径和选项。我正在使用官方的 R 二进制文件。

【问题讨论】:

  • @zx8754 感谢您的链接。我看过那个问题。答案是~/.R/Makevars 应该 覆盖Makeconf,但在我的机器上却没有。我的问题是:为什么不是,我该如何解决?我怀疑在过去一年半左右的时间里,R 中一定发生了一些变化,因为在那之前一切正常,而且我不记得在我的机器上进行过任何相关的更改(除了更新 R)。
  • 您需要使用备用编译器从源代码重建 R。然后etc/Makeconf 将包含有关您使用的编译器的信息。如果你不这样做,你可能会因为不同编译器所做的假设之间的差异而遇到问题。你也许可以让它工作,但你永远无法确定。
  • @Szabolcs:我们对此表示怀疑。 R 扩展这些变量,它将读取~/.R/Makevars 并应用它。很多人,包括 R Core,都依赖它来微调构建。您将必须证明它如何/为什么不起作用。 事前问题是您本地的。也许$HOME$USER 搞砸了或相关的东西。
  • @Szabolcs ~/.R/Makeconf 最好是更改,但不替换默认设置。我不是 mac 用户,但我相信 mac.r-project.org 的建议是使用他们的工具链。
  • 所以不,您创建了一个非标准设置,并且想知道为什么它的行为不像标准设置。

标签: r path r-package


【解决方案1】:

事实证明,在我的机器上尝试构建某个包时,~/.R/Makevars 被忽略的原因是 withr 中的一个错误:

使用devtools::install_github("r-lib/withr@master") 安装withr 的开发版本解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    相关资源
    最近更新 更多