gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 11:30:50 24 4
gpt4 key购买 nike

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

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

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

最佳答案

第 1 步:为 src/Makevars 中的所有变体设置 CXX 这是因为您可能正在使用 CXX_STD = CXX11 所以 CXX11 被用来代替 CXX...

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

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

第 2 步:在 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

关于r - 如何更改编译器版本以构建基于 Rcpp 的包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43826436/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com