r
  • rcpp
  • 2012-04-07 4 views 1 likes 
    1

    私はいくつかのインラインC++を持つRスクリプトを持っており、同じディレクトリにヘッダファイルを含めたいと思っています。ディレクトリをハードコーディングせずに、Rcppインラインでローカルヘッダファイルを含めるにはどうしたらいいですか?

    library(Rcpp) 
    library(inline) 
    
    code <- ' 
        // my C++ code here 
        ' 
    
    settings=getPlugin("Rcpp") 
    settings$env$PKG_CXXFLAGS='-I /hard/coded/path/to/header/' 
    
    myfunction <- cxxfunction(signature(x="numeric"), 
              plugin="Rcpp", include='#include "myheader.hpp"', 
              settings=settings, body=code) 
    

    しかし、同じディレクトリにヘッダーファイルを含めるのが便利なように思えます。私はそれが何であるか分かりません。私は本当に同じディレクトリにあるC++ファイルを含める方法が好きです。

    (また謝罪:私はC++(またはR)忍者ではないので、私は非常に何かを明らかに欠落している可能性があり

    答えて

    1

    あなたが言うとき、あなたが「同じディレクトリに」を参照して、どのディレクトリ明確にすることができ?同じように何?

    それは現在のディレクトリがある場合

    は、そのディレクトリがデフォルトとして追加されていないこととして、あなたはまだ -I.を必要としています。しかし、それは確かにあなたがしたいディレクトリ、その 相対パスである場合(「電流を言ってdir ")は絶対値よりも一般的です。 -I/hard/coded/path/to/header

    それ以外の場合は、プラグインを修正してコンパイラに余分なフラグを提供する正しい方法です。

    編集:テストまたは2を作り、それがinlineパッケージは常にコンパイルするRのTEMPDIRを使用することが判明 - それがどこにあるか、我々が一般的に知らないよう-I.は意味がありません。 2つの選択肢があなたを残し

    :あなたが行っているよう

    1. は、絶対パスを使用してください。

    2. Rを使用して、ヘッダファイルの内容をinclude=引数に渡される変数に読み込みます。

    編集2:

    settings <- getPlugin("Rcpp") 
    settings$env$PKG_CXXFLAGS <- paste("-I", getwd(), sep="") 
    

    、その後cxxfunctionへの呼び出しで設定=設定を使用します:我々はRcpp自体に同梱例の一つには、それを行うことが判明しました。

    +0

    同じディレクトリ= RスクリプトとCPPファイルが置かれているディレクトリ。私はちょうど "sugarbenchmarks.r"サンプルスクリプトで、現在の作業ディレクトリがgetwd()で得られ、これが上記の-Iフラグとともに使用されていることに気付きました。それがこの問題を解決する標準的な方法ですか? –

    +0

    現在のディレクトリを追加する最も簡単な方法は '-I.'を使うことです。私はあなたが '〜/ .R/Makevars'の' CXXFLAGS'を使ってあなたのすべてのRプロジェクトのためにやってもいいと思います。 –

    +0

    恐ろしいです。助けてくれてありがとう - Rcppにも感謝します。 –

    関連する問題