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

时间:2015-03-27 23:58:16

标签: c++ c++11 gcc clang travis-ci

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

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

我知道如何在gcc和clang上构建,但不能在多个版本上构建。

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

1 个答案:

答案 0 :(得分:35)

确定Travis CI可能/允许的内容以及什么不是,这是(并且仍然是)非常痛苦。我的current solution看起来像这样:

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

一些评论:

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

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