我在两台配置相同的机器上使用RStudio,甚至使用相同的.Rproj文件(来自Dropbox)。
增量重建
默认情况下,RStudio执行包的增量重建。 C ++文件只有在更改或任何头文件更改时才会重新编译。这为增量开发提供了快速周转。
在一台计算机上,如果我修改一个简单的.R文件,或者,即使我根本没有修改任何文件,也选择 Build&重新加载,然后C ++不会重新编译。
然而,另一方面,我得到:
没有更改文件:
==> devtools::document(roclets=c('rd', 'collate', 'namespace', 'vignette'))
Updating quanteda documentation
Loading quanteda
'/Library/Frameworks/R.framework/Resources/bin/R' CMD INSTALL '/Users/kbenoit/Dropbox (Personal)/GitHub/quanteda' --library='/var/folders/46/zfn6gwj15d3_n6dhyy1cvwc00000gp/T//RtmpowXjeu/devtools_install_cd475c156859' --no-R --no-data --no-help --no-demo --no-inst --no-docs --no-exec --no-multiarch --no-test-load --preclean
Re-compiling quanteda
clang++ -std=c++11 -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I. -I/usr/local/include -I/usr/local/include/freetype2 -I/opt/X11/include -I"/Library/Frameworks/R.framework/Versions/3.3/Resources/library/Rcpp/include" -I"/Library/Frameworks/R.framework/Versions/3.3/Resources/library/RcppParallel/include" -I"/Library/Frameworks/R.framework/Versions/3.3/Resources/library/RcppArmadillo/include" -fPIC -Wall -mtune=core2 -g -O2 -c RcppExports.cpp -o RcppExports.o
等
更改了一个.R文件:
(这是一个没有实际功能的数据文档R文件)
==> Rcpp::compileAttributes()
* Updated src/RcppExports.cpp
* Updated R/RcppExports.R
==> devtools::document(roclets=c('rd', 'collate', 'namespace', 'vignette'))
Updating quanteda documentation
Loading quanteda
'/Library/Frameworks/R.framework/Resources/bin/R' CMD INSTALL '/Users/kbenoit/Dropbox (Personal)/GitHub/quanteda' --library='/var/folders/46/zfn6gwj15d3_n6dhyy1cvwc00000gp/T//RtmpLaNxr4/devtools_install_cdef692abc82' --no-R --no-data --no-help --no-demo --no-inst --no-docs --no-exec --no-multiarch --no-test-load --preclean
Re-compiling quanteda
问题:如何在必要时让第二台机器只进行增量构建,这是假设的默认行为?
更新:
答案 0 :(得分:3)
公平的问题。快速而有些相关的观点,有一些警告:
我更喜欢忽略/避免使用devtools,因为我发现它混淆了。
但下面的内容也适用于此。
这里的关键命令是R CMD INSTALL
及其朋友(即R CMD SHLIB
等)
AFAIK这些根本不具备make
的逻辑,除非必要,否则不会重建
plus 我们鼓励我们运行cleanup
并删除现有工件
过去曾被咬过,我更喜欢清洁后重建
所有这些都会导致完整(呃)重建。
但不要绝望:唯一最好的诀窍是......通过使用来避免这种情况
CC=ccache gcc
CXX=ccache g++
依此类推,OS X下clang
的同意。只需信任 awesome ccache前端,你的重建(未更改的代码)就会闪电般快速。我在工作和家用机器上工作了很多年。
现在这里有一个相关的子问题:RStudio何时/如何为我们运行compileAttributes()
?我不确定。我可能依赖(如make
)时间戳,网络驱动器和共享可能存在问题。如果有疑问,我会通过一个更小的帮助脚本在命令行上本地执行此操作。
编辑:为方便起见,下面是我在本地dotfile仓库中的内容。我允许为gcc等设置一个版本,有时在编译器转换期间需要这个版本。当空的时候(就像现在一样)它没有坏处,我们只是得到g++
等等。
#VER=-4.9
VER=
CCACHE=ccache
CC=$(CCACHE) gcc$(VER)
CXX=$(CCACHE) g++$(VER)
CXX1X=$(CCACHE) g++$(VER)
SHLIB_CXXLD=g++$(VER)
FC=ccache gfortran
F77=ccache gfortran