发布Rcpp软件包的版本

时间:2020-10-23 21:20:06

标签: r rcpp compiler-optimization

我想为使用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 = / build / r-base-jbaK_j / r-base-3.6.3 =。 -fstack-protector-strong -Wformat -Werror =格式安全性-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

1 个答案:

答案 0 :(得分:3)

这个问题曾经出现过,但是您“不能”缺少本地功能,并且一次性编辑R的Makevars。

简短的答案(在这里,我将使用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和朋友的分发硬线
  • 软件包维护者(实际上是我)为发行版指定的内容

所有这些都会设置您的CXXFLAGS(与CXX11... CXX14... ...相同)。 然后可以设置

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

真正奇怪的是,即使在将近25年之后,我们仍然没有 no 机制来编辑和覆盖此机制并有选择地撤消。我想我记得,对于gcc等人来说,最右边的值会赢...

总而言之,要“确定”,您必须在计算机本地配置文件中编辑-O0值。