如何覆盖 R 使用的编译器?

How to override compilers used by R?

当我尝试从源代码编译 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 二进制文件。

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

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