我正在构建一个R包,其中有几个使用GSL和OpenMP的第三方C函数,然后使用Rcpp (它只是修改一些参数并调用相应的C函数)。在我的Windows机器中一切正常,但我不知道如何以便携的方式定义Makevars.win和Makevars文件。我的Makevars.win看起来像这样:使用C,GSL和OpenMP的便携式Makevars在Rcpp的帮助下使用C,GSL和OpenMP
## This assumes that the LIB_GSL variable points to working GSL libraries
PKG_CPPFLAGS=-I$(LIB_GSL)/include -I../inst/include
PKG_LIBS=-L$(LIB_GSL)/lib/x64 -lgsl -lgslcblas $(SHLIB_OPENMP_CFLAGS)
PKG_CFLAGS=$(SHLIB_OPENMP_CFLAGS)
它基本上是从各种来源复制的。就像这样,这个编译在我的电脑中(使用Rtools的工具链),如果我删除PKG_CFLAGS=$(SHLIB_OPENMP_CFLAGS)
,我也可以在没有OpenMP的情况下进行编译(出于某种原因,我不明白如果我在PKG_LIBS
中删除OpenMP标志,我会得到错误)。
我的Makevars文件看起来完全相同,但我无法访问Unix平台,因此我不确定如何处理这一方。我的猜测是我需要用LIB_GSL
替换一些东西?
编辑:
好吧,我想我终于明白了如何配置等工作,并能得到的一切工作。
我Makevars.win
:
## This assumes that the LIB_GSL variable points to working GSL libraries
PKG_CPPFLAGS=-I$(LIB_GSL)/include -I../inst/include
PKG_LIBS="-L$(LIB_GSL)/lib/$(R_ARCH)" -lgsl -lgslcblas $(SHLIB_OPENMP_CFLAGS)
PKG_CFLAGS=$(SHLIB_OPENMP_CFLAGS)
我Makevars.in
:
GSL_CFLAGS = @[email protected]
GSL_LIBS = @[email protected]
PKG_LIBS=$(GSL_LIBS) $(SHLIB_OPENMP_CFLAGS)
PKG_CFLAGS=$(GSL_CFLAGS) $(SHLIB_OPENMP_CFLAGS)
而且我configure.ac:
AC_INIT([testpackage], 0.0.1)
## Use gsl-config to find arguments for compiler and linker flags
##
## Check for non-standard programs: gsl-config(1)
AC_PATH_PROG([GSL_CONFIG], [gsl-config])
## If gsl-config was found, let's use it
if test "${GSL_CONFIG}" != ""; then
# Use gsl-config for header and linker arguments
GSL_CFLAGS=`${GSL_CONFIG} --cflags`
GSL_LIBS=`${GSL_CONFIG} --libs`
else
AC_MSG_ERROR([gsl-config not found, is GSL installed?])
fi
# Now substitute these variables in src/Makevars.in to create src/Makevars
AC_SUBST(GSL_CFLAGS)
AC_SUBST(GSL_LIBS)
AC_OUTPUT(src/Makevars)
然后我在testpackage
目录下运行,以autoconf的获得configure
文件,这在运行时将Makevars.in
转换为Makevars
R CMD INSTALL
。
尝试一个虚拟机与Linux – phonixor 2014-11-24 12:22:36