7

我有一个 R 包,我将一个包含矩阵代数的 MCMC 算法移动到C++使用该RcppEigen包,这大大提高了速度。

但是,在 Linux 上R CMD check给出以下内容(感谢 R-Forge):NOTE

* checking installed package size ... NOTE
  installed size is  6.6Mb
  sub-directories of 1Mb or more:
    libs   6.1Mb

这个警告可能不是由我的 C++ 代码的惊人大小(只有大约 150 行)驱动的,因为它只出现在 Linux 上,但可能是由于我无法正确配置Makevars文件。(我从未使用过makemakefile以前)。
同样在将包提交给 时CRAN,Brian Ripley 写了一些关于此的内容NOTE,这让我认为这是一个Makevars问题:“它来自调试符号。”

MyMakevarsRcpp MakevarsRcpp.package.skeleton.

我的问题:

  • 如何配置我Makevars的方式以减少 Linux 上已编译库的大小(即,摆脱NOTE.
  • 关于如何进入 for 魔法的好资源有Makevars哪些Rcpp(我在图库
    中没有找到任何东西,而关于此的R 扩展手册对我来说也是不可理解的)

我的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 
4

1 回答 1

7

你引用我们写的。这里没有什么特别的:你只是想了解基本的 Makefile 语法和选项

src/Makevars除非您了解自己在做什么,否则不建议摆弄。您可能会破坏某些东西,尤其是基于另一种架构的构建。Simon Urbanek 对这个建议非常坚定。

Brian Ripley 当然只说对了一半:如果您启用了调试,那么库会更大。但CXXFLAGS从未设置,特别是没有设置-g标志来打开调试。所以这不是我们:如果默认启用调试,则其他东西将其打开。默认情况下可以是 R。查看您的.R/Makevars.

大小的另一个驱动因素是 C++ 模板。与使用 (Rcpp)Eigen 的其他包相比,它们可能也很大。这“只是做生意的成本”:模板为您提供了您喜欢的(编码)能力。

编辑错别字

于 2013-05-22T10:41:46.210 回答