【发布时间】:2018-07-26 18:23:19
【问题描述】:
我对如何有效地准备 R 包有点困惑,以便它可以在所有需要的系统平台上兼容。这是必要的,以便 CRAN 接受新版本的包。主要困难来自于编译外部 C++ 共享库,如果编译器可用,还可以选择 CUDA 版本。为了支持这个流程,我创建了特定的 Makefile,不幸的是使用了 GNU 扩展。它在 Linux、OSX 和在 Solaris 上通过 gmake 手动执行时运行良好。相关部分在这里:
# Checking whether nvcc compiler is available
NVCC_TEST = $(shell basename $(shell which nvcc 2> /dev/null)"")
ifeq ($(NVCC_TEST),nvcc)
ALL_LIBS += libcucubes_gpu.so
ALL_OBJS += $(GPU_OBJS)
ALL_FLAGS += $(GPU_FLAGS)
else
ALL_OBJS += gpu_fallback.o
endif
事实证明,在 Solaris 上运行 R CMD INSTALL (...) 时,安装失败,如下所示:
make: Fatal error in reader: Makefile, line 39: Unexpected end of line seen
ERROR: compilation failed for package 'libcucubes'
事实证明,这是由于 Solaris 版本的 make 被执行而不是 GNU 兼容的 gmake(我已经测试过它工作正常),即使它可用。我的问题是,对于 R 包构建,是否有任何简单的方法来强制使用 gmake。一般来说,我知道我可以使用autotools 来解决安装过程中的兼容性问题,但是对于这种简单的情况,它似乎带来了太多的复杂性。任何建议将不胜感激,谢谢!
【问题讨论】:
-
您可以使用
CMake创建Makefile。 -
目前最好的解决方案是为每个环境创建
Makefile和一个手写的./configure(./bin/sh兼容)脚本,以根据操作系统和 CUDA 模块的可用性来切换它们...
标签: r makefile gnu-make solaris cran