如何更改编译器版本以构建基于Rcpp的包?

时间:2017-05-06 23:43:44

标签: r rcpp

我正在创作一个使用外部g++-4.9库和头文件的包。在使用纯C ++编译演示代码进行测试之后,我注意到它适用于g++5.0但不适用于g++ 5.4.0或更高版本。我的系统默认值为CXX=g++-4.9

我尝试将./configure添加到src/Makevarsg++,但编译器仍然是系统默认~/.R/Makevars。我不想修改全局配置(例如在cpp中),因为它会影响其他包构建​​。

当我构建这个包时,是否有一种本地方式来指定Rcpp用于编译Boolean?文件的编译器版本?

1 个答案:

答案 0 :(得分:4)

第1步:为CXX中的所有变种设置src/Makevars,因为您可能正在使用CXX_STD = CXX11,因此使用CXX11代替CXX。 ..

CXX=g++-4.9
CXX1X=g++-4.9
CXX11=g++-4.9
CXX14=g++-4.9

注意:这假设您只编译C ++代码。

步骤2:使用{<1}}在configure.ac中测试gcc 4.9:

AC_PREREQ(2.61)

AC_INIT(your_package_name_here, m4_esyscmd_s([awk -e '/^Version:/ {print $2}' DESCRIPTION]))
AC_COPYRIGHT(Copyright (C) 2017 your name?)


## Determine Install Location of R
: ${R_HOME=$(R RHOME)}
if test -z "${R_HOME}"; then
    AC_MSG_ERROR([Could not determine R_HOME.])   
fi

## Setup RBin
RBIN="${R_HOME}/bin/R"
CXX=`"${RBIN}" CMD config CXX`
CPPFLAGS=`"${RBIN}" CMD config CPPFLAGS`
CXXFLAGS=`"${RBIN}" CMD config CXXFLAGS`

## We are using C++
AC_LANG(C++)
AC_REQUIRE_CPP

## Check the C++ compiler using the CXX value set
AC_PROG_CXX

## If the compiler is g++, then GXX is set so version information can be exaimed
if test "${GXX}" = yes; then
    AC_MSG_CHECKING([whether g++ version is sufficient])
    gxx_version=$(${CXX} -v 2>&1 | awk '/^.*g.. version/ {print $3}')
    case ${gxx_version} in
        4.9.*)
             AC_MSG_RESULT([(${gxx_version}) yes])
        ;;

 1.*|2.*|3.*|4.0.*|4.1.*|4.2.*|4.3.*|4.4.*|4.5.*|4.6.*|4.7.*|4.8.*|5.*|6.*|7.*)
             AC_MSG_RESULT([no])
             AC_MSG_WARN([Only g++ version 4.9.* be used to compile this package.])
             AC_MSG_ERROR([Please set the default compiler to gcc++-4.9.])   
    ;;
    esac
else
 AC_MSG_WARN([The package uses an external shared library that only compiles with gcc++-4.9])
 AC_MSG_ERROR([Please set the default compiler to gcc++-4.9.])   
fi

AC_OUTPUT