gpt4 book ai didi

rstudio - 为什么 Build & Reload 会重新编译所有 C++ 文件,即使这些文件没有改变?

转载 作者:行者123 更新时间:2023-12-04 02:08:22 24 4
gpt4 key购买 nike

我在两台机器上使用 RStudio,配置相同,甚至是相同的 .Rproj 文件(来自 Dropbox)。

来自 RStudio webpage :

Incremental Rebuilds

By default RStudio performs incremental rebuilds of packages. C++ files are only recompiled when they change or any header files change. This provides fast turnaround for incremental development.



在一台机器上,如果我修改一个简单的 .R 文件,或者即使我根本不修改任何文件,选择 构建和重新加载 ,则 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

问题:我怎样才能让第二台机器在必要时只进行增量构建,这是假设的默认行为?

更新 :
  • 在克隆到非 Dropbox 本地存储库并在两台机器上构建后,我已经验证这不是由于 Dropbox。
  • 即使使用 ccache 问题也不会消失在 Makevars正如@DirkEddelbuettel 所建议的那样(尽管出于其他原因,这是一个好主意,所以我现在正在使用它)。
  • 如果我从项目选项的构建工具 Pane 中取消选中 Roxygen 选项框中的构建和重新加载,问题就会消失:

  • Roxygen options

    最佳答案

    公平的问题。快速且有些相关的内容,但有一些警告:

  • 我更喜欢忽略/避免开发工具,因为我发现它会混淆。
  • 但下面的内容也适用于它。
  • 这里的关键命令是 R CMD INSTALL及其 friend (即 R CMD SHLIB 等)
  • AFAIK 这些根本没有 make 的逻辑除非需要,否则不重建
  • 此外,我们鼓励运行 cleanup并删除现有的工件
  • 过去被咬过,我更喜欢清洁后重建

  • 所有这些都会导致完全(呃)重建。

    但不要绝望:唯一最好的技巧是......通过使用来避免这种情况
     CC=ccache gcc
    CXX=ccache g++

    依此类推,同上 clang在 OS X 下。只要相信 真棒 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

    关于rstudio - 为什么 Build & Reload 会重新编译所有 C++ 文件,即使这些文件没有改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41401430/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com