为什么我们在 RcppArmadillo 上同时 "include" 和 "depends"?

Why do we both "include" and "depends" on RcppArmadillo?

要使用 RcppArmadillo,我们通常会被指示在顶部添加以下行:

#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]

为什么我们需要两者? #include 指令是否足以让我们访问 RcppArmadillo 范围内定义的所有函数?

有两个不同的因素在起作用:

  1. 编译器需要 header RcppArmadillo.h 来了解 (Rcpp)Armadillo、Rcpp 的类型(因为这个也包含 Rcpp.h ) 因此 R. 我想你知道你需要这个。但是...

  2. R 怎么知道要为此添加 -I... 标志?不会的!

包级别 LinkingTo: 有助于 header 案例。但在更深层次的意义上,有时我们需要 headers and 链接(即 RcppGSL),在这种情况下,我们通过 Rcpp::depends 进入 Rcpp 属性的钩子确保我们可以做到这一点。

因此 // [[Rcpp::depends(RcppArmadillo)]] 有助于 sourceCpp() 使用。包中不需要它。 "Plugins" 像这样在 Rcpp 属性小插图中进行了一些讨论。