Ken*_*oit 4 rcpp rstudio roxygen2
我在两台机器上使用 RStudio,具有相同的配置,甚至具有相同的 .Rproj 文件(来自 Dropbox)。
增量重建
默认情况下,RStudio 执行包的增量重建。C++ 文件仅在更改或任何头文件更改时才会重新编译。这为增量开发提供了快速周转。
在一台机器上,如果我修改一个简单的 .R 文件,或者即使我根本不修改任何文件,并选择Build & Reload,那么 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
Run Code Online (Sandbox Code Playgroud)
ETC
更改了一个.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
Run Code Online (Sandbox Code Playgroud)
问题:如何让第二台机器在必要时仅进行增量构建,这是假定的默认行为?
更新:
在克隆到非 Dropbox 本地存储库并在两台计算机上构建后,我已经验证这不是 Dropbox 造成的。
ccache
即使按照 @DirkEddelbuettel 的建议使用in后,问题也不会消失Makevars
(尽管出于其他原因这是一个好主意,所以我现在正在使用它)。
如果我在项目选项的“构建工具”窗格中取消选中“Roxygen 选项”框中的“构建并重新加载”,问题就会消失:
公平的问题。快速且有些相关的看法,但有一些警告:
我更喜欢忽略/避免开发工具,因为我发现它会造成混淆。
但下面的内容也适用于它。
这里的关键命令是R CMD INSTALL
及其朋友(即R CMD SHLIB
等)
make
据我所知,除非需要,否则这些根本不具有不重建的逻辑
另外,我们鼓励运行cleanup
和删除现有的工件
过去被咬过,我更喜欢清洁后重建
所有这些都会导致全面重建。
但不要绝望:最好的技巧是......通过使用来避免这种情况
CC=ccache gcc
CXX=ccache g++
Run Code Online (Sandbox Code Playgroud)
等等,在clang
OS X 下同上。只要相信出色的 ccache前端,您的重建(未更改的代码)将快如闪电。我已经在我的工作和家用机器上这样做很多很多年了。
现在这里有一个相关的子问题:RStudio 何时/如何compileAttributes()
为我们运行?我不知道。我可能依赖(如make
)时间戳,并且网络驱动器和共享可能存在问题。如果有疑问,我可以通过一个较小的帮助程序脚本在命令行上本地执行此操作。
编辑:为了方便起见,下面是我在本地点文件存储库中的内容。我允许为 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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
810 次 |
最近记录: |