经过一些源代码研究,以及来自 Dirk Eddelbuettel 的提示,我已经解决了这个问题:
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
自己的代码,但后来的代码链接到第 3 方库并拒绝使用这些选项进行编译。)