自定义包编译选项R.

时间:2014-03-17 11:13:54

标签: r compiler-construction cran

所以我正在构建一个包含旧f77代码的软件包,该代码绝对应该使用o0优化选项构建。

所以在我的软件包的/src/Makevars中我添加了这一行:

FFLAGS=-O0 -pipe  -g $(LTO)

但是当我编译我的包时,我看到R仍在使用 /usr/lib/R/etc/Makeconf文件中的默认编译选项:

gfortran   -fpic  -O3 -pipe  -g  -c Babar.f -o Babar.o

如何覆盖R中包的FORTRAN文件的默认编译选项? (我打算通过CRAN分发该包,因此应该从Makevars文件中设置编译选项)

2 个答案:

答案 0 :(得分:3)

这里有两到三件事:

  1. 正如您所注意到的,R本身使用从{em>其运行configure编码的选项,即内置时间。请参阅文件$RHOME/etc/Makeconf

  2. 您可以在每个包的基础上通过src/Makevars覆盖一些内容。这就是你可能想要的。有关变量列表,请参阅R Makeconf,并设置为FFLAGS

  3. 您可以通过每用户~/.R/Makevars覆盖所有构建的内容。例如,我为该文件中的构建设置了优化和警告级别。

  4. 参见"编写R扩展"手册了解详情。

    编辑:并且有1.a)您也可以编辑本地文件$RHOME/etc/Makeconf.site。在Debian / Ubuntu上,我将目录$RHOME/etc/软链接到/etc/R,这也使得这更容易。

答案 1 :(得分:1)

好的,我发现的最好的解决方案是像在quadprog软件包中那样(版本1.5-5)。以下是src / Makevars文件的相关部分:

mypackage_FFLAGS = $(FPICFLAGS) $(SHLIB_FFLAGS) 
all: $(SHLIB)
Babar.o: Babar.f
    $(F77) $(mypackage_FFLAGS) -O1 -pipe -g -c -o Babar.o Babar.f

所以,例如,当您将包发送到win-builder时,这是编译器输出的样子(确认此解决方案确实有效):

gfortran     -O1 -pipe -g -c -o Babar.o Babar.f