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

2024-03-17

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

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

Yet, R必须从某处读取配置.cpp文件包含Rcpp导出到包中src子目录编译良好。

我有兴趣知道如何写Makefile.win in the src目录以便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 https://github.com/kaskr/adcomp/issues/43

我尝试修改makefile德克建议here https://stackoverflow.com/a/7735661/2109289但没能复制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()然后继续运行其他包构建​​命令。
  2. 再做一次make使用RstudioBuild and Reload,除了现在它读取Makefile只编译TMB code.

不过,我确实有一个解决方法。本质上,R 扩展手册 https://cran.r-project.org/doc/manuals/r-release/R-exts.html#Package-subdirectories指出:

可以使用以下“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)

该文件读取并编译所有TMP type .cpp文件,存放在子目录中<pkgdir>/src/TMB,然后复制所有后续的.dlls in <pkgdir>/src/ and <pkgdir>/src/TMB到包的安装目录。

Note, 这是可能的,但可能非常困难 https://stackoverflow.com/a/18594574/2109289 to use Makevars当 TMB 文件存储在子目录中时完成编译。德克推荐了以下示例矩阵包 https://cran.r-project.org/web/packages/Matrix/index.html,但我没能修改那里的代码来执行我想要的操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何查看和复制 R 默认 Makevars 配置? 的相关文章

随机推荐