Travis CI与Clang 3.4和C++ 11

wil*_*ilx 38 c++ clang c++11 clang++ travis-ci

是否有可能让Travis CI与能够使用C++ 11的Clang一起工作?(我想要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>
Run Code Online (Sandbox Code Playgroud)

我见过这个-D__STRICT_ANSI__伎俩,但与我的其他事情发生了冲突.

是否有可能让它运作?另见我的.travis.yml.

cdu*_*001 61

现在有一种更好的方法可以做到这一点.

sudo: false
dist: trusty
language: cpp
os:
  - linux
compiler:
  - gcc
  - clang
install:
# /usr/bin/gcc is 4.6 always, but gcc-X.Y is available.
- if [[ $CXX = g++ ]]; then export CXX="g++-4.9" CC="gcc-4.9"; fi
# /usr/bin/clang has a conflict with gcc, so use clang-X.Y.
- if [[ $CXX = clang++ ]]; then export CXX="clang++-3.5" CC="clang-3.5"; fi
addons:
  apt:
    sources:
    - ubuntu-toolchain-r-test
    - llvm-toolchain-precise-3.5 # not sure why we needed this
  packages:
    - gcc-4.9
    - g++-4.9
    - clang-3.5
Run Code Online (Sandbox Code Playgroud)

(sudo: false根据Travis的支持,即使你有一个预泊坞回购,显式也会让它在Docker中构建(速度).)

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

  • 我们正在使用C++ 11,我们为g ++和clang ++构建.请参阅[我们的Travis版本之一]中的`-std = c ++ 11`(https://travis-ci.org/pb-cdunn/pbdagcon/builds/68746420).Travis日志的顶行表示一个dockerized构建.您也可以检查该版本的[`.travis.yml`](https://github.com/pb-cdunn/pbdagcon/blob/bc1814dcb2f2ef15176e89ae8437cb1dc0993553/.travis.yml). (2认同)

Flo*_*oux 33

这是我的.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
Run Code Online (Sandbox Code Playgroud)

编辑,因为为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
Run Code Online (Sandbox Code Playgroud)