2015-03-27 3 views
19

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

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

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

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

ответ

33

Было (и до сих пор) довольно болезненно выяснить, что возможно/разрешено с помощью Трэвиса С.И., а что нет. Моя 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 не пока доступны, но должны быть в скором времени
  • Clang 3.8 (разрабатываемая версия) от llvm-toolchain-precise хранилища в настоящее время черный (черный)

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

+7

Это хорошая вещь, чтобы получить что-то с земли, но для серьезных проектов вам также нужны libC++ и Boost, и все быстро становится сложным. Boost.Hana имеет хорошо сохранившийся файл [.yaml] (https://github.com/ldionne/hana/blob/master/.travis.yml) – TemplateRex

+2

@TemplateRex Кажется, что они используют Clang, а не GCC. В любом случае, это хороший пример, как только вы справились с основами. Мой ответ был главным образом предназначен для других, чтобы начать работу, потому что я видел так много версий, которые слишком сложны или они не работают, или и то, и другое. Я надеюсь, что знания распространяются по всему как можно большему количеству других репозиториев, так что везде, где ищет новый пользователь, он может найти хорошие примеры. –

+0

Подробнее как побочное замечание, половина боли в том, чтобы знать, как строить разные вещи. Я просто хотел, чтобы gcc-люди установили ночной сборщик репо, где можно было скачать пакеты .rpm/.deb (как это делает Кланг). Я также хотел бы иметь то же самое для Boost/libC++, все, что установка и компиляция на основе * для пользователя * просто безумная. – TemplateRex

Смежные вопросы