gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:42:30 26 4
gpt4 key购买 nike

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

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

然而,R必须从某处读取配置为 .cpp包含 Rcpp 的文件包裹导出 src子目录编译正常。

我有兴趣知道如何编写 Makefile.winsrc目录使得 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德克建议here但没有运气复制R即使使用全新的测试包也是默认行为。

我的 session 信息:

> 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使用 Rstudio Build and Reload , 除了现在它读取 Makefile只编译 TMB代码。

不过,我确实有一个解决方法。本质上,R extensions manual指出:

Something close to the default behavior could be replicated with the following `src/install.libs.R' file:

...

因为,编译的代码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输入 .cpp文件,存放在子目录<pkgdir>/src/TMB , 然后复制所有后续的 .dll<pkgdir>/src/<pkgdir>/src/TMB到包的安装目录。

请注意,it is possible, but possibly very difficult使用 Makevars当 TMB 文件存储在子目录中时完成编译。 Dirk 在 matrix package 中推荐了示例,但我没有运气修改那里的代码来做我想做的事。

关于c++ - 如何查看和复制 R 默认的 Makevars 配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46883786/

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