我有一个带有内联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)忍者,所以我可能会遗漏一些非常明显的东西。
答案 0 :(得分:1)
当您说“在同一目录中”时,您能说明您所引用的目录吗?什么相同?
如果它是当前目录,您仍然需要-I.
,因为该目录可能不会作为默认添加。但如果那确实是你想要的目录,那么它的相对路径(说“当前目录”)比绝对-I/hard/coded/path/to/header
更通用。
否则,您所做的就是修改插件以向编译器提供额外标志的正确方法。
编辑:进行了一两次测试后发现inline包始终使用R的tempdir进行编译 - 所以-I.
没有任何意义,因为我们通常会这样做不知道那是哪里。
这给你两个选择:
使用绝对路径。
使用R将头文件的内容读入传递给include=
参数的变量。
编辑2:原来我们在Rcpp本身附带的一个示例中执行此操作:
settings <- getPlugin("Rcpp")
settings$env$PKG_CXXFLAGS <- paste("-I", getwd(), sep="")
然后在调用cxxfunction时使用settings = settings。