Rcpp:将包中的 header 包含到 cppFunction 中

Rcpp: Include header from package into cppFunction

我有一个使用 Rcpp 的包。它有不同的 C++ 函数定义 int src/testr.h。现在在某些时候我需要生成 Rcpp 函数(使用 cppFunctioncxxfunction),这些函数使用 src/testr.h 中定义的东西。我怎样才能做到这一点?

我试过了,

> cxxfunction(signature(x="list") includes = c('#include "testr.h"'), body=sprintf(template, name, name))
> Rcpp::cppFunction(depends = "testr", includes = c('#include "src/testr.h"'), sprintf(template, name, name))

但是

file7086270f0da.cpp:7:10: fatal error: 'testr.h' file not found
#include "testr.h"

     ^      

快速建议:

  1. 将页眉移至inst/include/testr.h
  2. 这需要一个 src/Makevars 条目,例如 PKG_CPPFLAGS = -I../inst/include 才能在那里查看编译。
  3. 现在安装的包为 mypkg,您可以添加一个 depends="mypkg",R 将知道为您设置一个 -I...

我们一直使用相同的技巧,例如BH 和各种 Rcpp* 包。