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

否则,您所做的是修改插件以向编译器提供额外标志的正确方法。

编辑:做了一两个测试,结果发现内联包总是使用 R 的 tempdir 来编译——所以-I.没有意义,因为我们通常不知道它在哪里。

这让你有两个选择:

  1. 像您所做的那样使用绝对路径。

  2. 使用 R 将头文件的内容读入传递给include=参数的变量中。

编辑 2: 事实证明,我们在 Rcpp 本身附带的示例之一中这样做了:

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

然后在对 cxxfunction 的调用中使用 settings=settings。

于 2012-04-07T21:59:17.580 回答