web-dev-qa-db-fra.com

Comment utiliser travis-ci pour construire du c ++ moderne en utilisant cmake moderne?

Est-il possible d'utiliser travis-ci pour construire une application/projet c ++ utilisant cmake, gcc-6 et g ++ - 6?

10
henne90gen

Configurer Travis pour utiliser le bon compilateur est un peu délicat. Voici comment procéder:

Tout d'abord, vous devez paramétrer la distribution sur trusty (la dernière version d'ubuntu prise en charge par travis-ci) et requérir Sudo.

dist: trusty
Sudo: require

Ensuite, nous définissons le langage et le compilateur:

language: cpp
compiler: gcc

Jusqu'ici tout va bien. Nous pouvons maintenant configurer la configuration d’install d’apt:

addons:
  apt:
    sources:
      - ubuntu-toolchain-r-test
    packages:
      - gcc-6
      - g++-6
      - cmake

Cela ajoute le ppa pour la version plus récente de nos outils de construction et les installe. L'étape suivante consiste à configurer des liens vers les nouveaux gcc et g ++. /usr/local/bin fait l'objet d'une recherche avant /usr/bin, de sorte que les compilateurs de la version 6 que nous venons d'installer seront accessibles avec seulement gcc et g++. Le début de votre script: devrait ressembler à ceci:

script:
    - Sudo ln -s /usr/bin/gcc-6 /usr/local/bin/gcc
    - Sudo ln -s /usr/bin/g++-6 /usr/local/bin/g++

Ajoutez également la ligne suivante si vous souhaitez vérifier les versions de ces outils:

    - gcc -v && g++ -v && cmake --version

Les versions qui reviennent de ces commandes sont les suivantes:

gcc: 6.2.0
g++: 6.2.0
cmake: 3.2.2

C'est fondamentalement ça. Le fichier .travis.yml complet ressemble à ceci:

dist: trusty
Sudo: required
language:
  - cpp
compiler:
  - gcc
addons:
  apt:
    sources:
      - ubuntu-toolchain-r-test
    packages:
      - gcc-6
      - g++-6
      - cmake
script:
  # Link gcc-6 and g++-6 to their standard commands
  - ln -s /usr/bin/gcc-6 /usr/local/bin/gcc
  - ln -s /usr/bin/g++-6 /usr/local/bin/g++
  # Export CC and CXX to tell cmake which compiler to use
  - export CC=/usr/bin/gcc-6
  - export CXX=/usr/bin/g++-6
  # Check versions of gcc, g++ and cmake
  - gcc -v && g++ -v && cmake --version
  # Run your build commands next
14
henne90gen

J'ai trouvé des erreurs dans la réponse de @ henne90gen (ou peut-être qu'elles ont juste changé). Plus précisément:

  • Vous n'avez pas besoin de Sudo.
  • Vous n'avez pas besoin d'installer CMake à partir d'apt. Cela installera une ancienne CMake 2.8 de Trusty. Heureusement, l'image de compilation est déjà fournie avec CMake 3.9.2 (à partir de maintenant).
  • gcc-7 n'est pas installé sur /usr/local/bin et il est déjà dans la PATH.

Cela devrait fonctionner:

dist: trusty
language: cpp
addons:
  apt:
    sources:
      - ubuntu-toolchain-r-test
    packages:
      - gcc-7
      - g++-7
script:
  - export CC=gcc-7
  - export CXX=g++-7
  - ...

Voici un exemple plus long qui inclut une version moderne de Qt (avec QtSVG que j'utilise) et fonctionne sous OSX et Linux.

os:
  - linux
  - osx

language: cpp

dist: trusty

addons:
  apt:
    sources:
      - ubuntu-toolchain-r-test
      - sourceline: "ppa:beineri/opt-qt-5.10.1-trusty"
    packages:
      - gcc-7
      - g++-7
      - qt510-meta-minimal
      - qt510svg
      - qt510imageformats
      - qt510tools

before_install:
  - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
      brew update ;
      brew install qt5 cmake ;
      brew link --force qt ;
    fi

script:
  - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
      export CC=gcc-7 ;
      export CXX=g++-7 ;
      source /opt/qt510/bin/qt510-env.sh ;
    fi
  - cmake --version
  - qmake --version
  - ...
3
Timmmm