我还是不知道如何使用Makevars
做我想做的事,本质上是:
- 执行正常默认操作
make
在 Rstudio (Windows 7) 中通过Build and Reload
适合所有人的套餐Rcpp
导出文件。在幕后,这称为Rcpp::compileAttributes()
然后继续运行其他包构建命令。
- 再做一次
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
,然后复制所有后续的.dll
s 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,但我没能修改那里的代码来执行我想要的操作。