使用多个版本的编译器构建

mar*_*elo 21 c++ gcc clang c++11 travis-ci

如何配置travis-ci,以便我的项目使用多个版本的编译器构建?

说,我想用gcc-4.8,gcc-4.9,clang-3.4,clang-3.5和clang-3.6构建它.

我知道如何在gcc和clang上构建,但不是在它们的多个版本上.

为了提供更多的上下文,我的项目是一个C++库,我想确保与这些编译器的兼容性.

Dan*_*rey 36

想知道Travis CI可能/允许什么,什么不是,这是(并且仍然是)非常痛苦.我目前的解决方案如下:

language: cpp
matrix:
  include:
    - os: linux
      compiler: gcc
      addons:
        apt:
          sources: ['ubuntu-toolchain-r-test']
          packages: ['g++-4.8']
      env: COMPILER=g++-4.8

    - os: linux
      compiler: gcc
      addons:
        apt:
          sources: ['ubuntu-toolchain-r-test']
          packages: ['g++-4.9']
      env: COMPILER=g++-4.9

    - os: linux
      compiler: gcc
      addons:
        apt:
          sources: ['ubuntu-toolchain-r-test']
          packages: ['g++-5']
      env: COMPILER=g++-5

    - os: linux
      compiler: clang
      env: COMPILER=clang++

    - os: linux
      compiler: clang
      addons:
        apt:
          sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-precise-3.5']
          packages: ['clang-3.5']
      env: COMPILER=clang++-3.5

    - os: linux
      compiler: clang
      addons:
        apt:
          sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-precise-3.6']
          packages: ['clang-3.6']
      env: COMPILER=clang++-3.6

# Activate when 3.7 is released and the repository is available
#    - os: linux
#      compiler: clang
#      addons:
#        apt:
#          sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-precise-3.7']
#          packages: ['clang-3.7']
#      env: COMPILER=clang++-3.7

# Activate when we are allowed to use MacOS X
#    - os: osx
#      compiler: clang
#      env: COMPILER=clang++

script:
  make CXX=$COMPILER -j3
Run Code Online (Sandbox Code Playgroud)

一些评论:

  • 以上使用基于容器的基础设施
  • 每个容器只安装一个编译器 - 加快构建速度并避免出现问题,因为您通常无法并行安装多个软件包/编译器
  • 无法CXX直接设置,因为Travis CI将覆盖它.你需要一个中间变量COMPILER
  • clang++没有扩展名是目前锵3.4
  • Clang 3.7 尚未推出,但应该很快就会推出
  • 来自llvm-toolchain-precise存储库的Clang 3.8(开发版本)目前已列入黑名单

(注意上面的内容会随着时间的推移而改变/改进,现在(2016-01-11)可以使用Clang 3.7和MacOS X.以上是作为起点,根据需要进行调整)

  • 让一些东西开始是件好事,但对于严肃的项目,你还需要libc ++和Boost,而且东西很快变得复杂.Boost.Hana有一个维护良好的[.yaml文件](https://github.com/ldionne/hana/blob/master/.travis.yml) (7认同)
  • @TemplateRex他们似乎只使用Clang,而不是GCC.无论如何,一旦你掌握了基础知识,它就是一个很好的例子.我的答案主要是为了让其他人开始,因为我看过很多版本,这些版本要么过于复杂,要么无法正常工作,或两者兼而有之.我希望知识能够在尽可能多的其他存储库中传播,这样无论新用户在哪里,他都可以找到一些很好的例子. (2认同)
  • 谢谢一堆.这正是我正在寻找的. (2认同)