Я пытаюсь сделать свою посылку (код доступен здесь) проходить беспроигрышная строитель тесты, чтобы я мог загрузить в кран. Пакет сильно зависит от Rcpp, и я использую некоторые вещи, которые требуют стандарта C ++ 11. Но результаты теста win-builder продолжайте показывать несколько предупреждений, таких как следующее:
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
,
Примечание: я загружаю пакеты в win-builder через devtools::build_win()
,
Попробуйте добавить в DESCRIPTION
SystemRequirements: C++11
Это избавляет от необходимости указывать Makevars
для разных платформ (например, Makevars
для Unix + Solaris + macOS, Makevars.win
для окон).
Однако, как сказал @DirkEddelbuettel, поддержка C ++ 11 в Windows существует; но полнота C++11
реализация с gcc-4.9.3
проблематично на стороне библиотеки
Других решений пока нет …