【问题标题】:Building with more than one version of a compiler使用多个版本的编译器进行构建
【发布时间】:2015-06-01 10:48:04
【问题描述】:

如何配置 travis-ci 以便我的项目使用多个版本的编译器构建?

说,我想用 gcc-4.8、gcc-4.9、clang-3.4、clang-3.5 和 clang-3.6 构建它。

我知道如何在 gcc 和 clang 上构建,但不会在多个版本上构建。

为了提供更多背景信息,我的 project 是一个 C++ 库,我想确保与这些编译器的兼容性。

【问题讨论】:

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


    【解决方案1】:

    弄清楚 Travis CI 什么是可能的/允许的,什么是不可行的,过去(现在仍然是)非常痛苦。我的current solution 看起来像这样:

    language: cpp
    matrix:
      include:
        - os: linux
          compiler: gcc
          addons:
            apt:
              sources: ['ubuntu-toolchain-r-test']
              packages: ['g++-4.8']
          env: COMPILER=g++-4.8
    
        - os: linux
          compiler: gcc
          addons:
            apt:
              sources: ['ubuntu-toolchain-r-test']
              packages: ['g++-4.9']
          env: COMPILER=g++-4.9
    
        - os: linux
          compiler: gcc
          addons:
            apt:
              sources: ['ubuntu-toolchain-r-test']
              packages: ['g++-5']
          env: COMPILER=g++-5
    
        - os: linux
          compiler: clang
          env: COMPILER=clang++
    
        - os: linux
          compiler: clang
          addons:
            apt:
              sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-precise-3.5']
              packages: ['clang-3.5']
          env: COMPILER=clang++-3.5
    
        - os: linux
          compiler: clang
          addons:
            apt:
              sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-precise-3.6']
              packages: ['clang-3.6']
          env: COMPILER=clang++-3.6
    
    # Activate when 3.7 is released and the repository is available
    #    - os: linux
    #      compiler: clang
    #      addons:
    #        apt:
    #          sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-precise-3.7']
    #          packages: ['clang-3.7']
    #      env: COMPILER=clang++-3.7
    
    # Activate when we are allowed to use MacOS X
    #    - os: osx
    #      compiler: clang
    #      env: COMPILER=clang++
    
    script:
      make CXX=$COMPILER -j3
    

    一些备注:

    • 以上使用基于容器的基础架构
    • 每个容器只安装一个编译器 - 加快构建速度并避免出现问题,因为您通常无法同时安装多个包/编译器
    • 您可以直接设置CXX,因为 Travis CI 会覆盖它。你需要一个像COMPILER这样的中间变量
    • 不带扩展名的 clang++ 目前是 Clang 3.4
    • Clang 3.7还没有可用,但应该很快就会推出
    • llvm-toolchain-precise 存储库中的 Clang 3.8(开发版)目前已列入黑名单

    (请注意,上述内容会随着时间的推移而改变/改进,现在 (2016-01-11) Clang 3.7 可用,MacOS X 也是如此。以上内容是一个起点,根据需要进行调整)

    【讨论】:

    • 开始做一些事情是件好事,但是对于严肃的项目,你还需要 libc++ 和 Boost,而且事情很快就会变得复杂。 Boost.Hana 有一个维护良好的.yaml file
    • @TemplateRex 他们似乎只使用 Clang,而不是 GCC。无论如何,一旦你掌握了基础知识,它就是一个很好的例子。我的回答主要是为了让其他人开始,因为我见过太多的版本,它们要么过于复杂,要么不起作用,要么两者兼而有之。我希望知识能够传播到尽可能多的其他存储库中,以便新用户在任何地方都能找到一些好的示例。
    • 顺便说一句,一半的痛苦在于知道如何构建不同的东西。我只是希望 gcc 的人能建立一个夜间构建 repo,在那里人们可以下载 .rpm / .deb 包(就像 Clang 一样)。我也想为 Boost/libc++ 提供同样的功能,所有基于每个用户的安装和编译简直太疯狂了。
    • 非常感谢。这正是我正在寻找的。​​span>
    • @TemplateRex 非常感谢指向 Hana 的 .travis.yml 的指针
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-17
    相关资源
    最近更新 更多