自定义包编译选项R

自定义包编译选项R,r,compiler-construction,cran,R,Compiler Construction,Cran,因此,我正在构建一个包含旧f77代码的包,该代码绝对应该使用o0优化选项构建 因此,在我的包的/src/Makevars中,我添加了以下行: FFLAGS=-O0 -pipe -g $(LTO) 但是当我编译我的包时,我看到R仍然在使用 /usr/lib/R/etc/Makeconf文件中的默认编译选项: 如何在R中覆盖我的包的FORTRAN文件的默认编译选项? 我打算通过CRAN分发该包,因此应该从Makevars文件设置编译选项这里有两到三件事: 正如您所注意到的,R本身使用从其运行的c

因此,我正在构建一个包含旧f77代码的包,该代码绝对应该使用o0优化选项构建

因此,在我的包的/src/Makevars中,我添加了以下行:

FFLAGS=-O0 -pipe  -g $(LTO)
但是当我编译我的包时,我看到R仍然在使用 /usr/lib/R/etc/Makeconf文件中的默认编译选项:

如何在R中覆盖我的包的FORTRAN文件的默认编译选项?
我打算通过CRAN分发该包,因此应该从Makevars文件设置编译选项这里有两到三件事:

正如您所注意到的,R本身使用从其运行的configure(即构建时)中编码的选项。请参阅文件$RHOME/etc/Makeconf

您可以在每个包的基础上通过src/Makevars重写内容。这就是你在这里可能想要的。有关变量列表,请参见R的Makeconf,并设置eg FFLAGS

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

有关详细信息,请参阅编写R扩展手册


编辑:还有1.a您也可以编辑本地文件$RHOME/etc/Makeconf.site。在Debian/Ubuntu上,我将目录$RHOME/etc/into/etc/R软链接到/etc/R中,这样做也更方便。

这里有两到三件事:

正如您所注意到的,R本身使用从其运行的configure(即构建时)中编码的选项。请参阅文件$RHOME/etc/Makeconf

您可以在每个包的基础上通过src/Makevars重写内容。这就是你在这里可能想要的。有关变量列表,请参见R的Makeconf,并设置eg FFLAGS

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

有关详细信息,请参阅编写R扩展手册


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

好的,我找到的最好的解决方案是像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
因此,例如,当您将程序包发送到时,编译器输出看起来是这样的,以确认此解决方案确实有效:

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

好的,我找到的最好的解决方案是像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
因此,例如,当您将程序包发送到时,编译器输出看起来是这样的,以确认此解决方案确实有效:

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

如果您给出的选项没有冲突,那么另一种可能的解决方案似乎是在Makevars文件中设置FC=gfortran-O0-pipe-g。在我的例子中,它显示了编译器中的选项。缺点是以后还会有标准选项。如果您提供的选项没有冲突,另一种可能的解决方案似乎是在Makevars文件中设置FC=gfortran-O0-pipe-g。在我的例子中,它显示了编译器中的选项。缺点是以后您也会有标准的。这是Makeconf还是Makevars?在und os x tools一节中,它提到创建~/.R/Makevars,内容为CC=/usr/local/clang4/bin/clangcxx=/usr/local/clang4/bin/clangg++LDFLAGS=-L/usr/local/clang4/lib Yes,sorrym in 3。它是~/.R/Makevars。会更正的。它也是$RHOME/etc/Makevars.site吗?我无法让Makeconf.site工作,但从这里找到了一个Makevars.site:这是Makeconf还是Makevars?在und os x tools一节中,它提到创建~/.R/Makevars,内容为CC=/usr/local/clang4/bin/clangcxx=/usr/local/clang4/bin/clangg++LDFLAGS=-L/usr/local/clang4/lib Yes,sorrym in 3。它是~/.R/Makevars。会更正的。它也是$RHOME/etc/Makevars.site吗?我无法使Makeconf.site正常工作,但在此处找到了Makevars.site: