我正在尝试使我的包裹(code available here)通过win-builder测试,以便我可以上传到cran。该软件包在很大程度上依赖于Rcpp,我使用一些需要C ++ 11标准的东西。但是win-builder test results继续显示许多警告,如下所示:

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文件。以防万一,在我的DESCRIPTION上有以下几行:

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


编辑:我将以上内容复制到最小测试包的DESCRIPTION文件中,以使它们更加相似,并且最小测试文件仍可以使用-std=gnu++11正确编译。

注意:我通过devtools::build_win()将软件包上传到win-builder。

最佳答案

尝试添加DESCRIPTION

SystemRequirements: C++11


这避免了为不同平台指定自定义Makevars的需要(例如,对于Unix + Solaris + macOS为Makevars,对于Windows为Makevars.win)。

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

关于c++ - 如何确保win-builder使用c++ 11构建我的软件包?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48668357/

10-12 20:44