所以我正在构建一个包含旧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文件中设置编译选项)
答案 0 :(得分:3)
这里有两到三件事:
正如您所注意到的,R本身使用从{em>其运行configure
编码的选项,即内置时间。请参阅文件$RHOME/etc/Makeconf
您可以在每个包的基础上通过src/Makevars
覆盖一些内容。这就是你可能想要的。有关变量列表,请参阅R Makeconf
,并设置为FFLAGS
。
您可以通过每用户~/.R/Makevars
覆盖所有构建的内容。例如,我为该文件中的构建设置了优化和警告级别。
参见"编写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