【问题标题】:How to use travis-ci to build modern c++ using modern cmake?如何使用 travis-ci 使用现代 cmake 构建现代 c++?
【发布时间】:2017-06-14 11:22:33
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

配置 travis 以使用正确的编译器有点棘手。 可以这样做:

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

dist: trusty
sudo: require

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

language: cpp
compiler: gcc

到目前为止一切顺利。现在我们可以开始设置 apt install 配置了:

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

【讨论】:

  • unlink 但有 i) 通过update-alternatives 和/或 ii) 更多的 Debian/Ubuntu 方式,您可以设置 CXX
  • 感谢您的反馈。这是我能想到的第一个稳定的东西。我将编辑取消链接部分并改用 CC 和 CXX。
  • 另外,你不需要sudo——你是那个脚本的根。最后,另一个技巧是链接到一个新的/usr/local/bin/g++(Debian 不会填充/usr/local/,它保证为空),因为它将在/usr/bin 之前搜索。以防万一构建脚本不尊重CCCXX,...
  • 太棒了,这正是我所缺少的那种内在。 :D
  • 我认为应该更新答案以包括“现代 cmake”。您从可信赖的存储库中获得了什么版本?
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 为什么你更喜欢仿生而不是 xenial 或 trusty?只是好奇。现在,Trusty 似乎 EOL 如此仿生和 xenial 似乎比 trusty 更可取,但为什么是仿生而不是 xenial? Bionic 似乎比 xenial 更新,所以这是我的另一个原因。还有其他人吗?谢谢!
    【解决方案4】:

    在为此苦苦挣扎了太久之后添加了一个半相关的解决方案。希望它可以帮助其他人避免花费我在更新 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 构建以找出问题的确切开始位置?

    【讨论】:

    • 谢谢!我正在寻找这个答案!我试了一下,它安装了 g++7.5.0。但是我仍然遇到一些错误,variants 未定义。你知道如何拥有 cmake 或 make 使用 -std=c++17 吗?
    猜你喜欢
    • 2020-07-21
    • 1970-01-01
    • 2017-02-05
    • 2016-01-04
    • 1970-01-01
    • 2016-06-15
    • 2015-09-18
    • 2021-07-19
    • 2014-12-14
    相关资源
    最近更新 更多