3

我正在开发一个使用带有多个 cpp 文件的 Rcpp 的包“xyz”。当我只更新 R 代码时,我想R CMD INSTALL xyz在包目录上运行,而不必重新编译所有未更改的共享库。--no-multiarch如果我指定了标志,那效果很好:源目录src第一次被编译的对象填充,如果源没有改变,下次它们会被重新使用。src然而,在启用多架构的情况下,R 决定制作src-i386和的两个副本src-x86_64总是重新运行所有编译R CMD INSTALL似乎令人困惑。有什么解决方法吗?

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

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

4

1 回答 1

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可以用来打开或关闭某些测试。我倾向于让他们都开着——在这里浪费几秒钟比从维也纳得到一个讨厌的图要好。

于 2012-11-18T14:04:43.257 回答