如何使用travis-ci使用现代cmake构建现代c ++?

时间:2017-01-29 01:13:49

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

是否可以使用travis-ci构建使用cmake,gcc-6和g ++ - 6的c ++应用程序/项目?

4 个答案:

答案 0 :(得分:15)

配置travis以使用正确的编译器有点棘手。 这是如何做到的:

首先,您需要将分发设置为可信任(由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,因此只需gccg++即可访问我们新安装的第6版编译器。 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

答案 1 :(得分:4)

我在@ 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
  - ...

答案 2 :(得分:0)

为此苦苦挣扎太长时间之后,添加了一个半相关的解决方案。希望它可以帮助其他人避免花费我在更新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基于特定提交的构建,以找出问题出在哪里?

答案 3 :(得分:0)

使用dist: bionic。这应该满足大多数情况。