【问题标题】:How to select the C/C++ compiler used for a GitHub Actions Job?如何选择用于 GitHub Actions 作业的 C/C++ 编译器?
【发布时间】:2020-01-08 15:49:45
【问题描述】:

有没有办法为 GitHub Actions 作业选择默认的 C/C++ 编译器(例如 gcc 或 clang)?

确切地说,我希望 CMake 在不破解 CMake 命令的情况下选择不同的编译器。

理想情况下,通过扩展构建矩阵。与 Node.js 版本类似,如官方文档中所述: https://help.github.com/en/articles/configuring-a-workflow#configuring-a-build-matrix

类似的东西:

[..]
strategy:
  matrix:
    compiler: [gcc, clang]
[..]

【问题讨论】:

  • 这到底为什么会有两票接近?这个问题直接涉及到编程工具。

标签: c++ continuous-integration github-actions


【解决方案1】:

https://gitlab.kitware.com/cmake/community/wikis/FAQ#how-do-i-use-a-different-compiler 建议使用CCCXX 环境变量来选择编译器,我喜欢你使用矩阵在不同编译器下运行的想法。所以现在我们只需要看看https://help.github.com/en/articles/workflow-syntax-for-github-actions#jobsjob_idstrategymatrix,看看如何使用矩阵。这是他们展示的示例 sn-p:

runs-on: ${{ matrix.os }}
strategy:
  matrix:
    os: [ubuntu-16.04, ubuntu-18.04]
    node: [6, 8, 10]
steps:
  - uses: actions/setup-node@v1
    with:
      node-version: ${{ matrix.node }}

如您所见,在matrix: 下指定一个foo 变量会创建一个matrix.foo 值,您可以在其他地方引用该值。所以你会做这样的事情:

name: Build master

on: [push]

strategy:
  matrix:
    compiler: [gcc, clang]
jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v1
    - name: Run CMake
      env:
        CC: ${{ matrix.compiler }}
      run: cmake --your-args-here

【讨论】:

  • 我忽略了他们将node 选为node-version 用于setup-node 操作。你的解决方案是要走的路。设置 CXX 也很容易扩展。虽然,我认为矩阵必须是实际工作的一部分:jobs.<job_id>.strategy.matrix.
  • 我更喜欢用-DCMAKE_CXX_COMPILER={foo} 调用CMake 并在env 中定义foo。至少在 Travis CI 上,直接弄乱 CXX 不适用于手动安装的编译器版本(比如 GCC-svn 或 Clang-svn nightly builds)。
  • 这个答案让我成功了 90%,但我必须将 strategy 关键字放在 build 中(请参阅 here)才能让一切正常工作。
猜你喜欢
  • 1970-01-01
  • 2022-06-10
  • 2021-04-03
  • 2021-06-18
  • 2010-11-08
  • 2021-12-19
  • 2021-05-13
  • 1970-01-01
  • 2020-10-16
相关资源
最近更新 更多