如何在Rcpp内联中包含本地头文件,而无需对目录进行硬编码?

问题描述 投票:1回答: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)忍者,所以我可能缺少一些非常明显的东西。

r rcpp
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="")

然后在对cxx函数的调用中使用settings = settings。

© www.soinside.com 2019 - 2024. All rights reserved.