web-dev-qa-db-ja.com

travis-ciを使用して最新のcmakeを使用して最新のc ++を構築する方法

Travis-ciを使用して、cmake、gcc-6、g ++-6を使用するc ++アプリケーション/プロジェクトを構築することはできますか?

16
henne90gen

適切なコンパイラを使用するようにtravisを構成するのは少し難しいです。これは、それを行う方法です。

まず、ディストリビューションをtrusty(travis-ciでサポートされている最新バージョンのubuntu)に設定し、Sudoを要求する必要があります。

dist: trusty
Sudo: require

次に、言語とコンパイラを設定します。

language: cpp
compiler: gcc

ここまでは順調ですね。これで、aptインストール構成をセットアップできます。

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

これにより、ビルドツールの新しいバージョンのppaが追加され、インストールされます。次のステップは、新しいgccとg ++へのリンクを設定することです。 /usr/local/bin/usr/binの前に検索されるため、新しくインストールされたバージョン6コンパイラはgccg++だけでアクセスできるようになります。 script:の始まりは次のようになります。

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

これらのツールのバージョンを確認する場合は、次の行も追加します。

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

これらのコマンドから返されるバージョンは次のとおりです。

gcc: 6.2.0
g++: 6.2.0
cmake: 3.2.2

基本的にはそれだけです。完全な.travis.ymlは次のようになります。

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
17
henne90gen

@ henne90genの回答にエラーが見つかりました(またはおそらく変更された可能性があります)。具体的には:

  • Sudoは必要ありません。
  • AptからCMakeをインストールする必要はありません。これにより、Trustyの古いCMake 2.8がインストールされます。幸いなことに、ビルドイメージにはすでにCMake 3.9.2が付属しています(現時点では)。
  • gcc-7/usr/local/binにインストールされず、PATHにすでにインストールされています。

これはうまくいくはずです:

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
  - ...

以下は、Qtの最新バージョン(私が使用しているQtSVGを含む)を含み、OSXと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
  - ...
5
Timmmm

使用する dist: bionic。これでほとんどのケースが満たされます。

1
imba-tjd

あまりにも長い間これに苦労した後、準関連ソリューションを追加します。うまくいけば、他の誰かが、travis.ymlの更新、コミット、Travisの待機というサイクルを費やした時間を他の誰かが費やさないようにするのに役立ちます...うまくいくまで繰り返します。

PythonプロジェクトでC拡張があり、Travisで失敗したテストの生成を開始しましたが、ローカルで合格しました。最終的に、xenialで古いバージョンのgccまで追跡しました環境です。私のために最終的に問題を解決したTravis YAMLファイルは次のとおりです。

dist: xenial
language: python
before_install:
  - Sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
  - Sudo apt-get update -q
  - Sudo apt-get install -y gcc-7
  - export CC=/usr/bin/gcc-7
python:
  - "3.6"
  - "3.7"
install:
  - pip install -r requirements.txt
  - python setup.py build_ext --inplace
script:
  - python run_tests.py

余談ですが、他の誰かが特定のコミットでTravisビルドをトリガーして、問題がどこから始まったかを正確に見つけたいと思っていますか?

0
Fiver