在Rcpp Makevars中设置CXXFLAGS < >我想在RCPP项目的MaveVar中将C++编译器标志设置为 -O0/COD>。

在Rcpp Makevars中设置CXXFLAGS < >我想在RCPP项目的MaveVar中将C++编译器标志设置为 -O0/COD>。,c++,r,rcpp,C++,R,Rcpp,如果我看一下/etc/R/Makeconf,我会发现编译命令似乎是 $(CXX) $(ALL_CPPFLAGS) $(ALL_CXXFLAGS) -c $< -o $@ 我可以在Makevars中编辑变量$(PKG\u cxflags),为特定库添加标题,但我不满意cxflags=-O3-pipe-g$(LTO)。我也希望能够直接在Makevars中这样做,以便根据我的需要调整每个项目 当我在Makevar中编辑cxflags时,什么都没有发生。是否可以调整该变量?另一种方法可能吗?我知

如果我看一下
/etc/R/Makeconf
,我会发现编译命令似乎是

$(CXX) $(ALL_CPPFLAGS) $(ALL_CXXFLAGS) -c $< -o $@
我可以在Makevars中编辑变量
$(PKG\u cxflags)
,为特定库添加标题,但我不满意
cxflags=-O3-pipe-g$(LTO)
。我也希望能够直接在Makevars中这样做,以便根据我的需要调整每个项目


当我在Makevar中编辑
cxflags
时,什么都没有发生。是否可以调整该变量?另一种方法可能吗?我知道我可以编辑
~/.R/Makevars
,并根据要求进行切换。我想知道是否有更可靠的方法。

您通常希望本地文件中有
PKG.*
变体,例如
~/.R/Makevars

以下是我的一部分(缩短、编辑):

## for C code
CFLAGS=               -O3 -g0 -Wall -pipe -pedantic -std=gnu99 

## for C++ code
#CXXFLAGS=             -g -O3 -Wall -pipe -Wno-unused -pedantic -std=c++11
CXXFLAGS=             -g -O3 -Wall -pipe -Wno-unused -pedantic 

## for Fortran code
#FFLAGS=-g -O3 -Wall -pipe
FFLAGS=-O3 -g0 -Wall -pipe
## for Fortran 95 code
#FCFLAGS=-g -O3 -Wall -pipe
FCFLAGS=-O3 -g0 -Wall -pipe

VER=-4.8
CC=ccache gcc$(VER)
CXX=ccache g++$(VER)
SHLIB_CXXLD=g++$(VER)
FC=ccache gfortran
F77=ccache gfortran
MAKE=make -j8

另一种(系统全局)方法是创建和编辑
/etc/R/Makeconf.site
(或者,当
/etc/R/
不存在时,
$RHOME/etc/R/Makeconf.site

谢谢。编辑~/.R/Makevars会带来额外的好处,即所有包都会有调试配置,这在包含RcppEigen等时可能会很方便。主要是头的特征可能不是最好的例子。我不知道我不知道应该如何找到这些标志,但是如果您已经设置了
CXX_STD=cx11
,那么您还需要使用
cx11flags
,而不是
cxflags
。我假设该约定也适用于
CXX14
CXX17
。这是正确的,也是最近的更改(在我写下答案之后)。
## for C code
CFLAGS=               -O3 -g0 -Wall -pipe -pedantic -std=gnu99 

## for C++ code
#CXXFLAGS=             -g -O3 -Wall -pipe -Wno-unused -pedantic -std=c++11
CXXFLAGS=             -g -O3 -Wall -pipe -Wno-unused -pedantic 

## for Fortran code
#FFLAGS=-g -O3 -Wall -pipe
FFLAGS=-O3 -g0 -Wall -pipe
## for Fortran 95 code
#FCFLAGS=-g -O3 -Wall -pipe
FCFLAGS=-O3 -g0 -Wall -pipe

VER=-4.8
CC=ccache gcc$(VER)
CXX=ccache g++$(VER)
SHLIB_CXXLD=g++$(VER)
FC=ccache gfortran
F77=ccache gfortran
MAKE=make -j8