いくつかのソースコードの研究とDirkEddelbuettelからのヒントの後、私はこれを解決しました:
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
すでにやるべきことです(IMHO)。現在、環境に変数を追加しますが、後で削除することはありません。したがって、unsetenv()
呼び出しなしで、後でcxxfunction
再度実行した場合でも、すべてのデフォルトを使用すると、CXXFLAGS
以前に設定したものが使用されます。これは問題ではないかもしれませんし、驚くべき結果をもたらすかもしれません。PKG_CXXFLAGS
(自分のコードを設定-Wall -Werror
するために使用していたが、後でコードがサードパーティのライブラリにリンクし、それらのオプションでコンパイルすることを拒否した場合を想像してみてください。)