我正在制作一个包" xyz"使用Rcpp与几个cpp文件。
当我只更新R代码时,我想在包目录上运行R CMD INSTALL xyz
,而不必重新编译所有尚未更改的共享库。如果我指定--no-multiarch
标志,那么工作正常:源目录src
第一次被编译对象填充,如果源不改变,则下次重新使用它们。但是,在启用multiarch时,R决定制作两份src
,src-i386
和src-x86_64
。它似乎混淆了R CMD INSTALL
总是重新运行所有编译。有没有解决方法?
(我知道有其他方法,例如devtools::load_all
,但如果可能的话,我宁愿坚持R CM INSTALL
。
平台是MacOS 10.7,我有最新版本的R。
答案 0 :(得分:4)
我有一个部分答案。使用ccache可以实现一个非常简单的加速,您可以为所有R编译启用(例如通过R CMD whatever
,从而获得inline
,attributes
, RStudio
通过.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
可用于打开或关闭某些测试。我倾向于保持一致 - 最好在这里浪费几秒钟,而不是从维也纳得到一个令人讨厌的事情。