После некоторого изучения исходного кода и подсказки от Дирка Эддельбюттеля я решил это:
settings$env$PKG_CXXFLAGS='-std=c++0x'
Вы можете установить PKG_CPPFLAGS
таким же образом.
Вот полный и более надежный пример:
library(inline)
src='
using namespace Rcpp;
std::vector<const char*> test={"Hello","World","!!!"};
return wrap(test);
'
settings=getPlugin("Rcpp")
settings$env$PKG_CXXFLAGS=paste('-std=c++0x',settings$env$PKG_CXXFLAGS,sep=' ')
fun=cxxfunction(signature(),src,plugin="Rcpp",settings=settings)
Sys.unsetenv('PKG_CXXFLAGS')
print(fun())
paste()
проверяет, если в плагине уже были какие-либо настройки, они сохраняются.
unsetenv()
- это то, что cxxfunction
уже должно делать (ИМХО). В настоящее время он добавляет переменные в среду, но не удаляет их после. Таким образом, без вызова unsetenv()
, если позже вы снова запустите cxxfunction
, но со всеми значениями по умолчанию, любой CXXFLAGS
, который вы установили ранее, будет использован. Это может не иметь значения, или это может дать удивительные результаты. (Представьте, что вы используете PKG_CXXFLAGS
для установки -Wall -Werror
для своего собственного кода, но позже код ссылается на стороннюю библиотеку и отказывается компилировать эти параметры.)