我正在尝试使我的包裹(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++11
的gcc-4.9.3
实现的完整性是有问题的关于c++ - 如何确保win-builder使用c++ 11构建我的软件包?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48668357/