我正在创作一个使用外部g++-4.9
库和头文件的包。在使用纯C ++编译演示代码进行测试之后,我注意到它适用于g++5.0
但不适用于g++ 5.4.0
或更高版本。我的系统默认值为CXX=g++-4.9
。
我尝试将./configure
添加到src/Makevars
和g++
,但编译器仍然是系统默认~/.R/Makevars
。我不想修改全局配置(例如在cpp
中),因为它会影响其他包构建。
当我构建这个包时,是否有一种本地方式来指定Rcpp用于编译Boolean?
文件的编译器版本?
答案 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