控制Rcpp中的编译顺序

时间:2013-05-11 02:33:48

标签: c++ r compilation collation rcpp

在R中,使用Rcpp访问C ++代码,而不将所有C ++代码放在一个文件中,如何控制编译时文件的使用顺序。

假设我有两种方法,methodPrimarymethodSecondary,我想将每种方法放在单独的文件methodPrimary.cppmethodSecondary.cpp上,但是请说函数{{1使用函数methodPrimary,如下所示:

methodSecodary.cpp

methodSecondary

methodPrimary.cpp

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
int methodSecondary(int i){
  return(i);
}

我收到一个错误,说#include <Rcpp.h> using namespace Rcpp; // [[Rcpp::export]] int methodPrimary(int i){ return 2*methodSecondary(i); } 未在此范围内声明,这是可以理解的,因为在这两个文件中的每个文件中都没有引用另一个文件。分别。

我最初的假设是Rcpp编译器会处理所有这些以及包构造和methodSecondary字段的使用,看似不是这样。

所以我的问题是,以正确的顺序编译/处理/声明所有文件的正确过程是什么?

1 个答案:

答案 0 :(得分:2)

编译顺序无关紧要。但是每个函数必须在编译器接受它之前声明。

创建一个头文件,声明所有函数,并将其包含在每个C源文件中。

methods.h

extern int methodPrimary(int);
extern int methodSecondary(int);

在每个C源文件中,在使用函数之前:

#include "methods.h"

您可以使用多个头文件,以便methodSecondary.h声明该功能。