Как убедиться, что win-builder собирает мой пакет с помощью c ++ 11?

Я пытаюсь сделать свою посылку (код доступен здесь) проходить беспроигрышная строитель тесты, чтобы я мог загрузить в кран. Пакет сильно зависит от 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(),

0

Решение

Попробуйте добавить в DESCRIPTION

SystemRequirements: C++11

Это избавляет от необходимости указывать Makevars для разных платформ (например, Makevars для Unix + Solaris + macOS, Makevars.win для окон).

Однако, как сказал @DirkEddelbuettel, поддержка C ++ 11 в Windows существует; но полнота C++11 реализация с gcc-4.9.3 проблематично на стороне библиотеки

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]