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

标签 r makefile rcpp

我有一个 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文件。 (我以前从未使用过 makemakefile)。
同样在将包提交到 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/

    相关文章:

    合并两个共享 (.so) 库

    c++ - 在 Rcpp 中选择一个不连续的子矩阵

    r - 在 Rstudio 中使用 RcppArmadillo 制作 R 包遇到错误 "undefined reference to dsyev"

    接受输入、运行 R 代码并将结果返回给 HTML 的 HTML 页面

    r - 在 Shiny Leaflet 中为空间子集绘制刷亮或访问绘制的形状几何图形

    r - 有没有一种方法可以有效地连接两个表,其键以列表格式存储

    build - 如何在 SCons 中构建目标之前和之后显示消息

    makefile - $(Q)@ : in Makefile 是什么意思

    r - Armadillo 中的新 `find_finite` 函数比循环慢 3.5 倍?

    r - 如何查看R中向量是否为空