例如boost,我可以在哪里指定以下内容:
1.External c++ header file include path
2.External c++ source file
3.External c++ link library file path
如
中所述,一切都进入
src/Makevars
精美的手册Writing R Extensions随R而来
Writing a package using Rcpp vignette 或 my book 我都在...中告诉过你
Dirk的论文《Thirteen Simple Steps for Creating An R Package with an External C++ Library》给出了例子
src/Makevars
:
CXX_STD = CXX11
PKG_CFLAGS = -I. -DGMP -DSKIP_MAIN
PKG_LIBS = $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS) -lgmpxx -lgmp
如您所见,在此文件的
PKG_LIBS
中指定了其他库。 src/Makevars
方法假定您使用标准包布局将 C++ 代码合并到您的项目中,如 Rcpp.package.skeleton()
生成的那样,具有 NAMESPACE
和 DESCRIPTION
等等。
根据上面 Dirk 的评论,当使用
sourceCpp
函数合并 C++ 代码时,目前无法指定外部库,因为该函数提供了一个应该是多平台的接口。
在我工作的地方,研究人员使用 Rcpp 不是为了创建包,而是将非标准位置的 C++ 脚本合并到他们在 Linux 操作系统中“动态”使用 R 的工作中。我们想包含多个外部 C++ 库,但 'Sys.setenv("PKG_LIBS = -lglpk -lsuperlu") 不起作用。为了让 Rcpp 找到它们,我们必须为路径添加“-L”并将它们放在“-l”语句之前:
Sys.setenv("PKG_LIBS = -L/PATH/TO/GLPK/LIB -L/PATH/TO/SUPERLU -lglpk -lsuperlu")