C++ 如何确保win builder使用c+构建我的包+;11?

C++ 如何确保win builder使用c+构建我的包+;11?,c++,r,c++11,rcpp,r-package,C++,R,C++11,Rcpp,R Package,我试图让我的包()通过测试,这样我就可以上传到cran。这个包在很大程度上依赖于Rcpp,我使用了一些需要C++11标准的东西。但是,屏幕上不断显示以下警告: warning: delegating constructors only available with -std=c++11 or -std=gnu++11 warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 我尝试使用R

我试图让我的包()通过测试,这样我就可以上传到cran。这个包在很大程度上依赖于Rcpp,我使用了一些需要C++11标准的东西。但是,屏幕上不断显示以下警告:

warning: delegating constructors only available with -std=c++11 or -std=gnu++11
warning: extended initializer lists only available with -std=c++11 or -std=gnu++11
我尝试使用
Rcpp.package.skeleton()
示例包进行一次最小测试,添加了一些扩展的初始值设定项列表用法,并且一个Makevars文件只包含一行:

CXX_STD = CXX11
但最小的测试效果很好。您可以在win builder测试结果中看到它正在使用
-std=gnu++11
编译的最小测试,而我的包正在编译时没有该选项:

最小测试:

*** arch - i386
d:/Compiler/gcc-4.9.3/mingw_32/bin/g++  -std=gnu++11 -I"D:/RCompile/recent/R/include" -DNDEBUG  -I"d:/RCompile/CRANpkg/lib/3.5/Rcpp/include"   -I"d:/Compiler/gcc-4.9.3/local330/include"     -O2 -Wall  -mtune=core2 -c RcppExports.cpp -o RcppExports.o
我的包裹:

*** arch - i386
d:/Compiler/gcc-4.9.3/mingw_32/bin/g++  -I"D:/RCompile/recent/R/include" -DNDEBUG  -I"d:/RCompile/CRANpkg/lib/3.5/Rcpp/include"   -I"d:/Compiler/gcc-4.9.3/local330/include"     -pedantic -O2 -Wall  -mtune=core2 -c Individual.cpp -o Individual.o
为什么它们使用不同的选项进行编译?我使用的是完全相同的
Makevars
文件。为了以防万一,我的
说明中有以下几行:

Imports:
    Rcpp (>= 0.12.14),
    Matrix,
    grid,
    animation
LinkingTo: Rcpp
Suggests:
    knitr,
    rmarkdown
Depends:
    R (>= 3.1.0)
License: GPL-2
LazyData: true
RoxygenNote: 6.0.1
URL: https://github.com/Lobz/facilitation
VignetteBuilder: knitr
编辑:我将上述内容复制到最小测试包的
说明
文件中,以使它们更相似,并且最小测试文件仍然使用
-std=gnu++11
正确编译


注意:我通过
devtools::build_win()
将包上载到win builder,尝试添加
说明

SystemRequirements: C++11
这避免了为不同平台(例如,Unix+Solaris+macOS的
Makevars
,windows的
Makevars.win
)指定自定义
Makevars
)的需要


然而,正如@DirkEddelbuettel所说,Windows上存在对C++11的支持;但是,使用
gcc-4.9.3
实现的
C++11
的完整性在库端是有问题的

您无法改变win builder使用
g++4.9.3
的事实。它不完全支持C++11,尤其是在库端。故事结束了。谢谢,@DirkEddelbuettel!知道为什么我的测试编译方式不同吗?你应该更显著地链接到你的源repo。乍一看,您缺少了
src/Makevars.win
文件——如果您使用了一个适当的包创建帮助程序(我们为其记录了两个不同的帮助程序),则不会出现这种情况。再次感谢@DirkEddelbuettel。我正在调查。我不知道这些存在。我想问一下,在这种情况下,谁是“我们”,我在哪里可以找到这些文档?那么,您是如何找到Rcpp的,以及您是如何设法不找到它的,例如,它的亮点?Windows上的C++11支持并不“不稳定”,我从来没有这样说过。您将获得
g++-4.9.3
提供的功能。不多也不少。我们曾经不得不将它的C++11库所缺少的东西向后移植。至于在
DESCRIPTION
中添加C++11声明,我一直认为我更喜欢
src/Makevars{.win}
方法,但首选项不同,两者都有效。@Dirkeddebuettel。很抱歉。在联盟中快速输入。感谢@coatless的想法,我正在寻找这样的解决方案。而且,它似乎起了作用,而我对Makevars和Makevars.win的尝试还没有起作用。我的构建报告现在显示了-std=gnu++11选项,警告消失了!