Rcpp 包的发布版本

Release build for Rcpp package

我想为使用 Rcpp 的 R 包制作一个发布版本,但是当我查看 g++ 的参数时,我发现即使我有一个 -O3 标志Makevars 文件,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=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

之前已经出现过,但是你“不能”在本地和 one-off 编辑 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 和朋友
  • 的分发硬件
  • 包维护者(实际上是我)为发行版指定的东西

所有这些都会设置您的 CXXFLAGSCXX11... CXX14... ... 也是如此)。 然后你可以设置

  • 你的 user-local 值来自 ~/.R/Makevars
  • 你的 package-local 值来自 src/Makevars

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

总而言之,要“确定”,您必须在 machine-local 配置文件中编辑掉 -O0 值。