我有一个我在R中编写的包,它有一大堆复杂的C ++代码,需要一段时间才能编译。
当我更改代码时,我想快速重建包,以便我可以测试它。但是,R CMD build
似乎每次都是从头开始,而不是使用我的代码的makefile来完成所需的操作。
有没有办法在R中快速重复构建一个包进行测试?
答案 0 :(得分:2)
我对此有一篇短暂的博文,但之前我曾多次提到过:使用ccache。当文件没有改变时(即当您只是更改帮助页面时)或少数文件发生变化时,它会有很大帮助。缓存是一个非常聪明的技巧,而且包很强大。
在Ubuntu / Debian上:sudo apt-get install ccache
后跟例如这在您的~/.R/Makevars
:
VER=
CCACHE=ccache
#CCACHE=
CC=$(CCACHE) gcc$(VER)
CXX=$(CCACHE) g++$(VER)
CXX11=$(CCACHE) g++$(VER)
CXX14=$(CCACHE) g++$(VER)
这也允许在g++
版本之间切换。将其更改为clang++
是留给读者的练习; - )
除此之外,请参阅R CMD build
和R CMD INSTALL
的选项,以跳过插图和/或手动构建,以进一步加快重建速度。
插图:这里重新安装了Rcpp本身(刚从git pull
开始),第一次安装在我的(正常)机器上工作时需要21.9秒,第二次只需要1.4秒,这要归功于{{ 1}}:
ccache
答案 1 :(得分:1)
Dirk's answer上面指出了正确的方向,但还不够。由于他要求我不附加我要求的最后步骤,我在这里这样做。 没有以下内容,我的问题就无法回答。
Dirk的答案对我来说没有用。如果编译看起来仍然很慢,请尝试运行:
ccache -s
结果看起来有点像这样
cache directory /home/myuser/.ccache
primary config /home/myuser/.ccache/ccache.conf
secondary config (readonly) /etc/ccache.conf
cache hit (direct) 0
cache hit (preprocessed) 0
cache miss 989
cache hit rate 0 %
called for link 12
preprocessor error 12
cleanups performed 16
files in cache 177
cache size 31.1 MB
max cache size 5.0 GB
Note that cache isn't getting hit, which means ccache isn't doing anything.
您可以使用:
export CCACHE_LOGFILE=ccache.log
R CMD build .
进行一些调试,虽然这对我没有帮助。
要运行什么固定的东西:
export CCACHE_NOHASHDIR=true
R CMD build .
事实证明,ccache有时会考虑文件的位置。 R CMD构建。似乎构建在一个临时目录中,因此文件的位置每次都在变化。