1

インライン C++ を含む R スクリプトがあり、同じディレクトリにヘッダー ファイルを含めたいと考えています。以下を機能させることができます:

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) の忍者ではないので、非常に明白な何かが欠けている可能性があります。

4

1 に答える 1

1

「同じディレクトリ内」と言うとき、どのディレクトリを指しているのか明確にできますか? 何と同じ?

それが現在のディレクトリである場合-I.、そのディレクトリはデフォルトとして追加されない可能性があるため、引き続き必要です。しかし、それが実際に必要なディレクトリである場合、その相対パス(「現在のディレクトリ」と言う)は絶対パスよりも一般的-I/hard/coded/path/to/headerです。

それ以外の場合は、プラグインを変更してコンパイラに追加のフラグを提供する正しい方法です。

編集: 1 つまたは 2 つのテストを行ったところ、インラインパッケージは常に R の tempdir を使用してコンパイルすることが判明しました-I.。通常、それがどこにあるかわからないため、意味がありません。

これにより、次の 2 つの選択肢が残ります。

  1. 行ったように絶対パスを使用します。

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

編集 2: Rcpp 自体に同梱されている例の 1 つでそれを行っていることがわかります。

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

次に、cxxfunction の呼び出しで settings=settings を使用します。

于 2012-04-07T21:59:17.580 に答える