我有一个 R 包,我将包含矩阵代数的 MCMC 算法移动到了 C++
使用 RcppEigen
包大大提高了速度。
然而,R CMD check
给出以下 NOTE
在 Linux ( Thanks to R-Forge ) 上:
* checking installed package size ... NOTE
installed size is 6.6Mb
sub-directories of 1Mb or more:
libs 6.1Mb
这个警告可能不是由我的 C++ 代码( which is only around 150 lines )的惊人大小引起的,因为它只出现在 Linux 上,但可能是因为我无法正确配置
Makevars
文件。 (我以前从未使用过 make
或 makefile
)。同样在将包提交到
CRAN
时, Brian Ripley 写了一些关于此的内容 NOTE
这让我期待它是 Makevars
问题:“它来自调试符号。”我的
Makevars
是标准Rcpp
Makevars
(下面给出)由 Rcpp.package.skeleton
制作.我的问题:
Makevars
以某种方式减少 Linux 上编译库的大小(即摆脱 NOTE
)? Makevars
的魔力有哪些好的资源?为 Rcpp
?(我在 Gallery 中没有找到任何东西,而 R extension manual on this 对我来说也是无法理解的)
我的
Makevars
:## Use the R_HOME indirection to support installations of multiple R version
PKG_LIBS = `$(R_HOME)/bin/Rscript -e "Rcpp:::LdFlags()"`
PKG_CPPFLAGS = -I. -I../inst/include
我的
Makevars.win
:## This assume that we can call Rscript to ask Rcpp about its locations
## Use the R_HOME indirection to support installations of multiple R version
PKG_LIBS = $(shell $(R_HOME)/bin/Rscript.exe -e "Rcpp:::LdFlags()")
PKG_CPPFLAGS = -I. -I../inst/include
最佳答案
你引用我们写的。这里没有什么特别的:你只是想了解基本的 Makefile 语法和选项。
摆弄 src/Makevars
,除非您了解自己在做什么,否则不建议这样做。您可能会破坏某些东西,尤其是在另一种架构上的构建。 Simon Urbanek 对这个建议非常坚定。
Brian Ripley 当然对了一半:如果您启用了调试,库会更大。但是CXXFLAGS
从未设置,尤其是没有 -g
标志设置为打开调试。所以它不是我们:如果默认情况下启用调试,则其他原因将其打开。默认情况下可能是R。查看您的 .R/Makevars
.
大小的另一个驱动程序是 C++ 模板。与其他使用 (Rcpp)Eigen 的包相比,它们也可能很大。这“只是做生意的成本”:模板为您提供了您喜欢的(编码)能力。
针对错别字进行了编辑
关于r - 如何改进 Rcpp (RcppEigen) 包的 Makevars 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16689561/