如何改进Rcpp(RcppEigen)包的Makevars文件?

时间:2013-05-22 10:35:15

标签: r makefile rcpp

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

但是,R CMD check在Linux(Thanks to R-Forge)上提供了以下NOTE

* 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文件。 (我之前从未使用过makemakefile) 另外,在向CRAN提交包时,Brian Ripley写了一些关于此NOTE的内容,这使我发现它是Makevars问题:“它来自调试符号。”

我的MakevarsRcpp生成的标准Makevars Rcpp.package.skeleton(如下所示)。

我的问题:

  • 如何以减少Linux上已编译库大小的方式配置Makevars(即摆脱NOTE)?
  • 如何为Makevars Rcpp加入Makevars的魔力有哪些好资源? (我在Gallery中找不到任何内容,而R extension manual on this对我来说也是不可理解的)

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

{{1}}

1 个答案:

答案 0 :(得分:7)

你引用我们写的东西。这里没有具体的内容:您只是想了解基本的Makefile语法和选项。

摆弄src/Makevars,除非你明白自己在做什么,否则不推荐。您可能会破坏某些东西,特别是在另一个架构上构建。 Simon Urbanek对这个建议非常坚定。

Brian Ripley当然是半正确的:如果你启用了调试,那么库就更大了。但是CXXFLAGS永远不会被设置,特别是没有设置-g标志来打开调试。所以不是我们:如果默认情况下启用调试,则会启用其他内容。默认情况下可以是R.查看您的.R/Makevars

另一个大小的驱动程序是C ++模板。与使用(Rcpp)Eigen的其他软件包相比,它们可能也很大。这只是“开展业务的成本”:模板为您提供了您喜欢的(编码)功能。

编辑错别字