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
和朋友 的分发硬件
- 包维护者(实际上是我)为发行版指定的东西
所有这些都会设置您的 CXXFLAGS
(CXX11...
CXX14...
... 也是如此)。
然后你可以设置
- 你的 user-local 值来自
~/.R/Makevars
- 你的 package-local 值来自
src/Makevars
真正奇怪的是,即使在将近 25 年之后,我们仍然没有 机制来编辑和覆盖它并有选择地撤消。我想我记得对于 gcc
等 最右边的值获胜...
总而言之,要“确定”,您必须在 machine-local 配置文件中编辑掉 -O0
值。
我想为使用 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
和朋友 的分发硬件
- 包维护者(实际上是我)为发行版指定的东西
所有这些都会设置您的 CXXFLAGS
(CXX11...
CXX14...
... 也是如此)。
然后你可以设置
- 你的 user-local 值来自
~/.R/Makevars
- 你的 package-local 值来自
src/Makevars
真正奇怪的是,即使在将近 25 年之后,我们仍然没有 机制来编辑和覆盖它并有选择地撤消。我想我记得对于 gcc
等 最右边的值获胜...
总而言之,要“确定”,您必须在 machine-local 配置文件中编辑掉 -O0
值。