使用multiarch在开发期间快速安装包

时间:2012-11-18 06:08:14

标签: r package rcpp

我正在制作一个包" xyz"使用Rcpp与几个cpp文件。 当我只更新R代码时,我想在包目录上运行R CMD INSTALL xyz,而不必重新编译所有尚未更改的共享库。如果我指定--no-multiarch标志,那么工作正常:源目录src第一次被编译对象填充,如果源不改变,则下次重新使用它们。但是,在启用multiarch时,R决定制作两份srcsrc-i386src-x86_64。它似乎混淆了R CMD INSTALL 总是重新运行所有编译。有没有解决方法?

(我知道有其他方法,例如devtools::load_all,但如果可能的话,我宁愿坚持R CM INSTALL

平台是MacOS 10.7,我有最新版本的R。

1 个答案:

答案 0 :(得分:4)

我有一个部分答案。使用ccache可以实现一个非常简单的加速,您可以为所有R编译启用(例如通过R CMD whatever,从而获得inlineattributesRStudio通过.R/Makevars全球使用,...)

edd@max:~$ tail -10 .R/Makevars

VER=4.6
CC=ccache gcc-$(VER)
CXX=ccache g++-$(VER)
SHLIB_CXXLD=g++-$(VER)
FC=ccache gfortran
F77=ccache gfortran
MAKE=make -j8

edd@max:~$ 

它负责编译单元的所有缓存。

现在,这并没有“明确地”解决我所不喜欢的--no-multiarch方面;因为我们在Linux上仍然主要是“单一的拱形”,因此不能发挥很大的作用。这最终会改变,但还没有改变。但我怀疑,但是通过让编译器决定缓存你也会产生净效果。

其他方面也可以控制,例如~/.R/check.Renviron可用于打开或关闭某些测试。我倾向于保持一致 - 最好在这里浪费几秒钟,而不是从维也纳得到一个令人讨厌的事情。