带有 Fortran 源代码的 R 包:如何在“pkgname/src/”下制作“Makevars”文件?

R package with Fortran Source Code: how to make “Makevars” file under “pkgname/src/”?

与我过去的问题的解决方案相关,, 我在 ~/.R/ 中有 Makevars。这允许我构建 R 包并在我的系统上本地工作。

现在我想让这个包可移植。我尝试将此 Makevars 移动到 src 文件夹并收到以下错误:

 * installing *source* package ‘pkgname’ ...
 ** libs
 gfortran-4.8  -fPIC -Wall -g -O2  -c  epidata.f95 -o epidata.o
 make: gfortran-4.8: No such file or directory
 make: *** [epidata.o] Error 1
 ERROR: compilation failed for package ‘pkgname’
 * removing ‘/Users/Vineetha/Desktop/pkgname.Rcheck/pkgname’

我该如何解决这个问题?

好的,我现在想我明白了这个问题。

您已经使用了维基上 gfortranbinaries page 的 gfortran。

您已调整 ~/.R/Makevars/,以便宏 FCF77FLIBS 指向正确的二进制文件和库。

您将 Makevars 移动到您的包 src 文件夹中以使您的包可移植。您假设它将是便携式的。您假设(或希望)R 包构建器会尊重您选择的编译器。然而,它不是那样工作的。

当 R 构建包时,它将始终使用用于构建您正在使用的 R 版本的编译器。您不能覆盖包Makevars中的上述宏。这些宏只能在 ~/.R/Makevars/.

您最有可能使用的 R 版本是在 OS X mavericks 上使用专门编译的 gfortran 4.8.2 编译的。这就是 R 所抱怨的。可以从here获取。您必须使用终端将压缩文件解压缩到正确的位置。但是,您不能只安装该版本的 gfortran,因为它会部分覆盖您的 6.1 版本。 所以不要那样做!.

您不必担心使用 gfortran 6.1 的问题。请参阅(已修补)R installation and administration manual 的第 57 页。

它声明您可以并且可以将您正在使用的 gfortran 与从 CRAN 获得的 R 的二进制版本一起使用。

所以没必要把你的~/.R/Makevars/移开。

要检查包裹的便携性,您可以将其发送到 winbuilder 服务。或者使用 Linux 虚拟机作为例子。

要保持​​包含 Fortran 源代码的包可移植,请不要使用该编译器的任何扩展,也不要使用特定于您的编译器版本的 Fortran 扩展。

简而言之,您不必解决您提到的问题。只需编写可移植代码。