Подтвердить что ты не робот

Создание с несколькими версиями компилятора

Как настроить travis-ci таким образом, чтобы мой проект строился с более чем одной версией компилятора?

Скажем, я хочу построить его с помощью gcc-4.8, gcc-4.9, clang-3.4, clang-3.5 и clang-3.6.

Я знаю, как строить как на gcc, так и на clang, но не на более чем одну их версию.

Чтобы дать немного больше контекста, мой проект является библиотекой С++, и я хочу обеспечить совместимость с этими компиляторами.

4b9b3361

Ответ 1

Было (и до сих пор) довольно болезненно выяснить, что возможно/разрешено с помощью Тревиса 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

Некоторые замечания:

  • Вышеупомянутая инфраструктура на основе контейнеров
  • Для каждого контейнера установлен только один компилятор - ускоряет сборку и устраняет проблемы, поскольку вы часто не можете параллельно устанавливать несколько пакетов/компиляторов.
  • Вы не можете установить CXX напрямую, так как Travis CI перезапишет его. Вам нужна промежуточная переменная типа COMPILER
  • clang++ без расширения в настоящее время Clang 3.4
  • Clang 3.7 еще не доступен, но должен быть скоро
  • Clang 3.8 (версия для разработки) из репозитория llvm-toolchain-precise в настоящее время находится в черном списке

(Обратите внимание, что вышеизложенное изменится/улучшится с течением времени, теперь (2016-01-11) доступен Clang 3.7, как и MacOS X. Вышеуказанное означает отправную точку, при необходимости приспосабливайтесь)