用Clang 3.4和C ++ 11的Travis CI

是否有可能得到特拉维斯CI与铿锵能够C + + 11的工作? (我想要Clang,而不是GCC,我已经在Travis CI中使用了GCC 4.8)。看来预装的版本不是C ++ 11的能力。 我所有的安装任何新版本的尝试都因为这个而失败 :

In file included from /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/bits/move.h:57: /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/type_traits:269:39: error: use of undeclared identifier '__float128' struct __is_floating_point_helper<__float128> 

我已经看到了-D__STRICT_ANSI__窍门,但是和其他的东西冲突。

是否有可能得到它的工作? 另见我的.travis.yml 。

这是我的.travis.yml文件的一部分(大部分来自这个文件 )。

 language: cpp compiler: - clang - gcc before_install: # g++4.8.1 - if [ "$CXX" == "g++" ]; then sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test; fi # clang 3.4 - if [ "$CXX" == "clang++" ]; then sudo add-apt-repository -y ppa:h-rayflood/llvm; fi - sudo apt-get update -qq install: # g++4.8.1 - if [ "$CXX" = "g++" ]; then sudo apt-get install -qq g++-4.8; fi - if [ "$CXX" = "g++" ]; then export CXX="g++-4.8"; fi # clang 3.4 - if [ "$CXX" == "clang++" ]; then sudo apt-get install --allow-unauthenticated -qq clang-3.4; fi - if [ "$CXX" == "clang++" ]; then export CXX="clang++-3.4"; fi script: - $CXX --version 

编辑,因为它可以是非常有用的为travis添加libc ++。 据我所知,libc ++没有Linux包,所以需要“手动”编译。 在使用clang编译时,不要忘记CXXFLAGS中的-stdlib = libc ++

 install: # clang 3.4 - if [ "$CXX" == "clang++" ]; then sudo apt-get install --allow-unauthenticated -qq clang-3.4; fi - if [ "$CXX" == "clang++" ]; then export CXXFLAGS="-std=c++0x -stdlib=libc++"; fi - if [ "$CXX" == "clang++" ]; then svn co --quiet http://llvm.org/svn/llvm-project/libcxx/trunk libcxx; fi - if [ "$CXX" == "clang++" ]; then cd libcxx/lib && bash buildit; fi - if [ "$CXX" == "clang++" ]; then sudo cp ./libc++.so.1.0 /usr/lib/; fi - if [ "$CXX" == "clang++" ]; then sudo mkdir /usr/include/c++/v1; fi - if [ "$CXX" == "clang++" ]; then cd .. && sudo cp -r include/* /usr/include/c++/v1/; fi - if [ "$CXX" == "clang++" ]; then cd /usr/lib && sudo ln -sf libc++.so.1.0 libc++.so; fi - if [ "$CXX" == "clang++" ]; then sudo ln -sf libc++.so.1.0 libc++.so.1 && cd $cwd; fi - if [ "$CXX" == "clang++" ]; then export CXX="clang++-3.4"; fi 

现在有更好的方法来做到这一点 。

 sudo: false language: cpp compiler: - gcc - clang install: - if [ "$CXX" = "g++" ]; then export CXX="g++-4.8" CC="gcc-4.8"; fi addons: apt: sources: - ubuntu-toolchain-r-test packages: - gcc-4.8 - g++-4.8 - clang 

(根据Travis的支持,明确的sudo: false将允许它在Docker中生成(为了速度),即使你有一个pre docker repo。)

感谢Travis的支持,注意到我的错误并修复了文档。

看来,铿锵的开发人员在-std=gnu++11模式下修复了这个问题。

你能用这个标志而不是__STRICT_ANSI__来build立吗?