我有一个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
文件。 (我之前从未使用过make
或makefile
)
另外,在向CRAN
提交包时,Brian Ripley写了一些关于此NOTE
的内容,这使我发现它是Makevars
问题:“它来自调试符号。”
我的Makevars
是Rcpp
生成的标准Makevars
Rcpp.package.skeleton
(如下所示)。
我的问题:
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}}
答案 0 :(得分:7)
你引用我们写的东西。这里没有具体的内容:您只是想了解基本的Makefile语法和选项。
摆弄src/Makevars
,除非你明白自己在做什么,否则不推荐。您可能会破坏某些东西,特别是在另一个架构上构建。 Simon Urbanek对这个建议非常坚定。
Brian Ripley当然是半正确的:如果你启用了调试,那么库就更大了。但是CXXFLAGS
永远不会被设置,特别是没有设置-g
标志来打开调试。所以不是我们:如果默认情况下启用调试,则会启用其他内容。默认情况下可以是R.查看您的.R/Makevars
。
另一个大小的驱动程序是C ++模板。与使用(Rcpp)Eigen的其他软件包相比,它们可能也很大。这只是“开展业务的成本”:模板为您提供了您喜欢的(编码)功能。
编辑错别字