【问题标题】:Release build for Rcpp packageRcpp 包的发布版本
【发布时间】:2021-02-06 22:59:58
【问题描述】:

我想为使用 Rcpp 的 R 包创建发布版本,但是当我查看 g++ 的参数时,我发现即使我的 Makevars 文件中有 -O3 标志,Rcpp 也被覆盖这在末尾带有 -O0 标志,例如我将其视为输出

g++ -std=gnu++11 -I"/usr/share/R/include" -DNDEBUG -I"/home/dz5937/R/x86_64-pc-linux-gnu-library/3.6/Rcpp/include "-I"/home/dz5937/R/x86_64-pc-linux-gnu-library/3.6/RcppEigen/include" -O3 -std=c++14 -fpic -g -O2 -fdebug-prefix-map=/构建/r-base-jbaK_j/r-base-3.6.3=。 -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g -UNDEBUG -Wall -pedantic -g -O0 -c btsatr.cpp -o btsatr。 o

如何让 Rcpp 进行发布构建,即比 -O0 更高的优化级别?

这是我的 Makevars 文件中的内容

PKG_CXXFLAGS = -O3 -std=c++14

【问题讨论】:

    标签: r rcpp compiler-optimization


    【解决方案1】:

    之前已经出现过,但您“不能”缺少本地和一次性编辑您的 Makevars for R。

    所以简短的回答(在这里我将使用我的 Debian / Ubuntu 系统上的路径,它有一个方便的快捷方式 /etc/R 作为 R 自己的 etc/ 目录的软链接):

    edd@rob:~$ grep -- '-g' /etc/R/Makeconf | grep -v "^#"
    CFLAGS = -g -O2 -fdebug-prefix-map=/build/r-base-8T8CYO/r-base-4.0.3=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g $(LTO)
    CXXFLAGS = -g -O2 -fdebug-prefix-map=/build/r-base-8T8CYO/r-base-4.0.3=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g $(LTO)
    CXX11FLAGS = -g -O2 -fdebug-prefix-map=/build/r-base-8T8CYO/r-base-4.0.3=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g $(LTO)
    CXX14FLAGS = -g -O2 -fdebug-prefix-map=/build/r-base-8T8CYO/r-base-4.0.3=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g $(LTO)
    CXX17FLAGS = -g -O2 -fdebug-prefix-map=/build/r-base-8T8CYO/r-base-4.0.3=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g $(LTO)
    CXX20FLAGS = -g -O2 -fdebug-prefix-map=/build/r-base-8T8CYO/r-base-4.0.3=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g $(LTO)
    FCFLAGS = -g -O2 -fdebug-prefix-map=/build/r-base-8T8CYO/r-base-4.0.3=. -fstack-protector-strong $(LTO_FC)
    FFLAGS = -g -O2 -fdebug-prefix-map=/build/r-base-8T8CYO/r-base-4.0.3=. -fstack-protector-strong $(LTO_FC)
    SAFE_FFLAGS = -g -O2 -fdebug-prefix-map=/build/r-base-8T8CYO/r-base-4.0.3=. -fstack-protector-strong -msse2 -mfpmath=sse
    TCLTK_LIBS = -L/usr/lib/x86_64-linux-gnu -ltcl8.6 -L/usr/lib/x86_64-linux-gnu -ltk8.6 -lX11 -lXss -lXext
    edd@rob:~$ 
    

    这(本质上)是三个来源的组合:

    • R 本身硬连线的东西
    • gcc 和朋友的分发硬连线
    • 包维护者(实际上是我)为发行版指定的东西

    所有这些都设置了您的CXXFLAGSCXX11...CXX14... 也一样...)。 然后你可以设置

    • 您的用户本地值通过~/.R/Makevars
    • 通过src/Makevars 你的包本地值

    真正奇怪的是,即使在将近 25 年之后,我们仍然没有机制来编辑和覆盖它并选择性地撤消。我想我记得对于gcc et al,最右边的值获胜......

    总而言之,为了“确定”,您必须编辑掉机器本地配置文件中的 -O0 值。

    【讨论】:

    • 谢谢德克!并感谢您多年来的所有贡献!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 2016-12-09
    • 1970-01-01
    • 2012-12-20
    • 2017-12-09
    • 2023-03-10
    • 2012-05-05
    相关资源
    最近更新 更多