Rcpp Makevars:portable -mpopcnt标志

时间:2017-09-29 00:06:47

标签: c++ c++11 rcpp

我正在使用Rcpp,我正在尝试将我的Makevars文件写成可移植的。最初这是我的文件:

PKG_CXXFLAGS = -std=c++11 -mpopcnt
PKG_CXX1XFLAGS = $(PKG_CXXFLAGS)

然后我修改了它,这样我就可以使C ++ 11标志可移植:

CXX_STD = CXX11
PKG_CXXFLAGS = -mpopcnt
PKG_CXX1XFLAGS = $(PKG_CXXFLAGS)

但是,-mpopcnt不是便携式标志。有没有解决这个问题?

1 个答案:

答案 0 :(得分:1)

你可以通过configure玩一些偷偷摸摸的技巧---可以是任何可执行的顶级脚本。如果你拥有它,我也不用担心autoconf(我应该补充说,我非常喜欢这些工具)。

因此configure可以只是一个shell脚本,甚至是通过#!/usr/bin/Rscript执行的R脚本,您可以在其中测试操作系统和/或编译器。当且仅当星星对齐时,您添加-mpopcnt,否则您不会。

而且,你可以兼容。

我曾在in this post上发表过同样的想法,其中有一个例子来删除一个C ++ 14开关:

#!/bin/bash

## Travis can let us run R 3.4.0 (from CRAN and the PPAs) but this R version
## does not know about C++14.  Even though we can select CXX_STD = C++14, R
## will fail as the version we use there was built in too old an environment,
## namely Ubuntu "trusty" 14.04.
##
## So we install g++-6 from another repo and rely on the fact that is
## defaults to C++14.  Sadly, we need R to not fail and hence, just on
## Travis, remove the C++14 instruction

if [[ "${CI}" == "true" ]]; then
    if [[ "${TRAVIS}" == "true" ]]; then 
        echo "** Overriding src/Makevars and removing C++14 on Travis only"
        sed -i 's|CXX_STD = CXX14||' src/Makevars
    fi
fi

您可以使用完全相同的逻辑添加您要添加的开关。