我正在使用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
不是便携式标志。有没有解决这个问题?
答案 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
您可以使用完全相同的逻辑添加您要添加的开关。