После некоторого изучения исходного кода и подсказки Дирка Эддельбюттеля я понял следующее:
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 для своего кода, но позже код связывается со сторонней библиотекой и отказывается компилироваться с этими параметрами.)
person
Community
schedule
24.08.2011