繁体   English   中英

如何查看和复制R默认的Makevars配置?

[英]How do I see and replicate the R default Makevars configuration?

我没有~/.R/Makevars文件,

> tools::makevars_user()
character(0)
> tools::makevars_site()
character(0)

但是, R必须从某处读取配置,因为软件包src子目录中包含Rcpp导出的.cpp文件可以Rcpp编译。

我有兴趣知道如何在src目录中编写Makefile.win ,以便Rcpp文件与TMB .cpp文件一起继续编译。 当前一个makefile像:

all: fn1.dll fn2.dll

fn1.dll: fn1.cpp
    Rscript --vanilla -e "TMB::compile('fn1.cpp')"

fn2.dll: fn2.cpp
    Rscript --vanilla -e "TMB::compile('fn2.cpp')"

clean:
    rm -rf *o

可以很好地编译TMB文件,并且实际上由以下建议: https : //github.com/kaskr/adcomp/issues/43

我试图修改makefile德克建议这里 ,但没有运气复制R的默认行为,即使有一个全新的测试包。

我的会话信息:

> sessionInfo()
R version 3.3.2 (2016-10-31)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

我仍然不知道如何使用Makevars来做我想要的事情,本质上是:

  1. 做一个正常的默认make通过在Rstudio(Windows 7)中Build and Reload包所有Rcpp导出文件。 Rcpp::compileAttributes() ,这调用Rcpp::compileAttributes()然后继续运行其他程序包构建命令。
  2. 使用Rstudio Build and Reload make另一个make ,除了现在它读取仅编译TMB代码的Makefile

但是,我确实有一种解决方法。 本质上, R扩展手册指出:

可以使用以下`src / install.libs.R'文件复制接近默认行为的文件:

...

由于编译TMB .cpp文件的代码只是R命令,因此很容易将它们集成到这样的文件中:

# replicate default R
files <- Sys.glob(paste("*", SHLIB_EXT, sep=''))
libarch <- if (nzchar(R_ARCH)) paste('libs', R_ARCH, sep='') else 'libs'
dest <- file.path(R_PACKAGE_DIR, libarch)
dir.create(dest, recursive = TRUE, showWarnings = FALSE)
file.copy(files, dest, overwrite = TRUE)

# now do TMB files
cpp_files <- list.files('./TMB/', full.names = T, pattern = '*.cpp')

for (f in cpp_files) {
    TMB::compile(f)
}

files <- Sys.glob(paste("./TMB/*", SHLIB_EXT, sep=''))
libarch <- if (nzchar(R_ARCH)) paste('libs', R_ARCH, sep='') else 'libs'
dest <- file.path(R_PACKAGE_DIR, libarch)
dir.create(dest, recursive = TRUE, showWarnings = FALSE)
file.copy(files, dest, overwrite = TRUE)

该文件读取并编译存储在子目录<pkgdir>/src/TMB中的所有TMP类型.cpp文件,然后将<pkgdir>/src/<pkgdir>/src/TMB所有后续.dll复制到软件包的安装目录。

注意,当TMB文件存储在子目录中时,使用Makevars进行编译是可能的,但可能非常困难 Dirk在matrix软件包中推荐了该示例,但是我没有运气在那里修改代码以执行我想要的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM