我想为使用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
答案 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:~$
(本质上)这是三个来源的组合:
gcc
和朋友的分发硬线所有这些都会设置您的CXXFLAGS
(与CXX11...
CXX14...
...相同)。
然后可以设置
~/.R/Makevars
的用户本地值src/Makevars
真正奇怪的是,即使在将近25年之后,我们仍然没有 no 机制来编辑和覆盖此机制并有选择地撤消。我想我记得,对于gcc
等人来说,最右边的值会赢...
总而言之,要“确定”,您必须在计算机本地配置文件中编辑-O0
值。