2015-09-15 14 views
6

(RStudioを使用して)新しいRcppパッケージを作成しました。Rcppコンパイル引数を変更して設定する方法

打ち鳴らす++ -I /ライブラリ/フレームワーク/ R.framework /リソース/含ま-DNDEBUG -I /は/ usr/local -Iを含める:このパッケージには、次のコンパイラオプションを使用してコンパイルされたC++の機能が含まれています/ usr/local/include/freetype2 -I/opt/X11/include -I "/Library/Frameworks/R.framework/Versions/3.2/Resources/library/Rcpp/include" -fPIC -Wall -mtune = core2 - グラム-O2 -c RcppExports.cpp -o RcppExports.o

私は、-gを削除-std=c++11を追加し、への引数-O2を変更する例えば、これらの引数を設定/変更したいです。また、これらの変更を一度指定することも可能です(パッケージの場合)。

+0

Rcppの質問ではありません(但し、ジェネリックRパッケージのコンパイルに関する質問はありません)。以前はいくつかの機会に回答していました。 'src/Makevars'や'〜/ .R/Makevars'を使ってください。 –

答えて

3

Writing R Extension, Section 1.2を処理すると、いくつかのシェルスクリプトでこれを処理できるはずです。最小限の例として、(Linuxマシン上で作業)、私はRcpp::Rcpp.package.skeletonから基本パッケージを作成し、プロジェクトのルートディレクトリに次の2つのファイルを置く:

のconfigure

#!/bin/bash 
if [ ! -d "~/.R" ]; then 
    mkdir ~/.R; touch ~/.R/Makevars 
    echo "CXXFLAGS= -O3 -std=c++11 -Wall -mtune=core2" > ~/.R/Makevars 
elif [ ! -e "~/.R/Makevars" ]; then 
    touch ~/.R/Makevars 
    echo "CXXFLAGS= -O3 -std=c++11 -Wall -mtune=core2" > ~/.R/Makevars 
else 
    mv ~/.R/Makevars ~/.R/Makevars.bak_CustomConfig 
    echo "CXXFLAGS= -O3 -std=c++11 -Wall -mtune=core2" > ~/.R/Makevars 
fi 

クリーンアップ

#!/bin/bash 
if [ -e "~/.R/Makevars.bak_CustomConfig" ]; then 
    mv -f ~/.R/Makevars.bak_CustomConfig ~/.R/Makevars 
fi 

とし、実行可能にしました(chmod 777 path/to/project/root/configurechmod 777 path/to/project/root/cleanup)。

g++ -m64 -I/usr/include/R -DNDEBUG 
-I/usr/local/include 
-I"/home/nr07/R/x86_64-redhat-linux-gnu-library/3.2/Rcpp/include" 
-fpic -O3 -std=c++11 -Wall -mtune=core2 
-c rcpp_hello.cpp -o rcpp_hello.o 

g++ -m64 -shared -L/usr/lib64/R/lib 
-Wl,-z,relro -o CustomConfig.so RcppExports.o rcpp_hello.o 
-L/usr/lib64/R/lib -lR 

R Makevarsデフォルトをオーバーライドし、適切なオプションを使用する:私は(抜粋)を持って構築し、リロード走っ 。


あなたはおそらくカップルが自分の目標に応じて、さらなるステップを取るしたいと思うので、これは、単に基本的な例だった:

  1. などのUnix/Linuxの対(異なるプラットフォーム用のスクリプトを適応Windows/Windows 64-bit)は、私が信じているリンクされた記事で触れられています。
  2. あなたのマシンからファイルのパーミッションを設定することで、これらのファイルを別のコンピュータで実行するのに十分であることを確認してください(私はうまくいくと思いますが、完全には肯定的ではありません)。
関連する問題