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

hen*_*gen 13 gcc cmake c++11 travis-ci

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

hen*_*gen 17

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

首先,您需要将分发设置为trusty(由travis-ci支持的最新版本的ubuntu)并且需要sudo.

dist: trusty
sudo: require
Run Code Online (Sandbox Code Playgroud)

接下来我们设置语言和编译器:

language: cpp
compiler: gcc
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.现在我们可以开始设置apt安装配置:

addons:
  apt:
    sources:
      - ubuntu-toolchain-r-test
    packages:
      - gcc-6
      - g++-6
      - cmake
Run Code Online (Sandbox Code Playgroud)

这为我们的构建工具的新版本添加了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++
Run Code Online (Sandbox Code Playgroud)

如果要验证这些工具的版本,请添加下一行:

    - gcc -v && g++ -v && cmake --version
Run Code Online (Sandbox Code Playgroud)

从这些命令返回的版本如下:

gcc: 6.2.0
g++: 6.2.0
cmake: 3.2.2
Run Code Online (Sandbox Code Playgroud)

基本上就是这样.完整的.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
Run Code Online (Sandbox Code Playgroud)


Tim*_*mmm 5

我在@ 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
  - ...
Run Code Online (Sandbox Code Playgroud)

这是一个更长的示例,其中包括现代版本的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
  - ...
Run Code Online (Sandbox Code Playgroud)