如何在R包的'src /'中使用子文件夹?

Dan*_*bel 4 r rcpp

src/例如src/libfoo,当我安装软件包时,子文件夹中的C或C ++代码不会被编译。

当我搜索了其他问题,我发现是提到Makevars。我搜索了Matrix包Makevars。我认为我应该补充:

PKG_LIBS: -Llibfoo
Run Code Online (Sandbox Code Playgroud)

但这没有用。

我还发现在编写R Extensions上。我在我的Makevars中添加了以下内容,但它也不起作用。

SOURCES = $(libfoo/*.c)
OBJECTS = $(SOURCES:.c=.o)
Run Code Online (Sandbox Code Playgroud)

我应该如何调整Makevars文件?

Dan*_*bel 5

最终通过设置以下方式工作:

SOURCES = $(wildcard libfoo/*.c)
OBJECTS = foo.o RcppExports.o $(SOURCES:.c=.o)
Run Code Online (Sandbox Code Playgroud)

对我而言,真正神秘的部分是wildcard定义SOURCES

  • 如果它有效,那就足够了:) 这是一个记录严重不足的角落,通常建议(在 r-devel 或 r-package-devel 上)尽可能不妨碍 R。而且至少-可能是你在这里所做的:你的源直接进入主共享库,就好像它们一直在 `src/` 中一样。 (2认同)
  • 检查是否允许使用“通配符”,或者您现在是否处于“哦,亲爱的,这是一个 GNU make 扩展”角落(如果需要,您可以通过“SystemRequirements:”解决, (2认同)