我有一个带一些内联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)忍者,所以我可能缺少一些非常明显的东西。
当您说“在同一目录中”时,您能否阐明要指的目录? 和什么一样
如果它是当前目录,则仍需要-I.
因为该目录可能不会默认添加。 但是,如果确实是您想要的目录,则其相对路径(说“当前目录”)比绝对-I/hard/coded/path/to/header
更通用。
否则,您所做的就是修改插件以向编译器提供额外标志的正确方法。
编辑:进行了一两个测试,结果证明内联软件包始终使用R的tempdir进行编译-所以-I.
毫无意义,因为我们通常不知道那在哪里。
这给您两个选择:
完成操作后,使用绝对路径。
使用R将头文件的内容读入传递给include=
参数的变量中。
编辑2:事实证明,我们在Rcpp附带的示例之一中做到了:
settings <- getPlugin("Rcpp")
settings$env$PKG_CXXFLAGS <- paste("-I", getwd(), sep="")
然后在对cxx函数的调用中使用settings = settings。