Reputation: 77096
I'm working on a package "xyz" that uses Rcpp with several cpp files.
When I'm only updating the R code, I would like to run R CMD INSTALL xyz
on the package directory without having to recompile all the shared libraries that haven't changed. That works fine if I specify the --no-multiarch
flag: the source directory src
gets populated the first time with the compiled objects, and if the sources don't change they are re-used the next time. With multiarch on, however, R decides to make two copies of src
, src-i386
and src-x86_64
. It seems to confuse R CMD INSTALL
which always re-runs all the compilation. Is there any workaround?
(I'm aware that there are alternative ways, e.g. devtools::load_all
, but I'd rather stick to R CM INSTALL
if possible).
The platform is MacOS 10.7, and I have the latest version of R.
Upvotes: 3
Views: 290
Reputation: 368211
I have a partial answer for you. One really easy for speed-up is provided by using ccache which you can enable for all R compilation (e.g. via R CMD whatever
thereby also getting inline
, attributes
, RStudio
use, ...) globally through .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:~$
It takes care of all caching of compilation units.
Now, that does not "explicitly" address the --no-multiarch
aspect which I don;t play much with that as we are still mostly 'single arch' on Linux. This will change, eventually, but hasn't yet. Yet I suspect but by letting the compiler decide the caching you too will get the net effect.
Other aspects can be controlled too, eg ~/.R/check.Renviron
can be used to turn certain tests on or off. I tend to keep'em all on -- better to waste a few seconds here than to get a nastygram from Vienna.
Upvotes: 4