After some source code study, and a hint from Dirk Eddelbuettel, I've worked this out:
settings$env$PKG_CXXFLAGS='-std=c++0x'
You can set PKG_CPPFLAGS
the same way.
Here is a complete and more robust example:
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())
The paste()
makes sure if there were any settings already in the plugin then they are preserved.
The unsetenv()
is something cxxfunction
should already be doing (IMHO). Currently it will add variables to the environment, but not remove them after. So, without the unsetenv()
call, if you later ran cxxfunction
again, but with all defaults, any CXXFLAGS
you had earlier set would get used. This might not matter, or it might give surprising results. (Imagine if your were using PKG_CXXFLAGS
to set -Wall -Werror
for your own code, but later code links to a 3rd party library and refuses to compile with those options.)