如何选择用于 GitHub Actions 作业的 C/C++ 编译器?

11
有没有一种方法可以选择默认的C/C++编译器(例如gcc或clang)用于GitHub Actions作业?
确切地说,我希望CMake能够选择不同的编译器而无需修改CMake命令。
理想情况下,通过扩展构建矩阵来实现。类似于官方文档中描述的Node.js版本: https://help.github.com/en/articles/configuring-a-workflow#configuring-a-build-matrix 类似这样:
[..]
strategy:
  matrix:
    compiler: [gcc, clang]
[..]

1
这个问题为什么有两个关闭投票?该问题直接涉及编程工具。 - rmunn
1个回答

10

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 并了解如何使用矩阵。下面是他们展示的示例片段:

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

我忽略了他们在“setup-node”操作中将node选为node-version。你的解决方案是正确的。它很容易扩展到设置CXX。虽然,我认为矩阵必须是实际工作的一部分:jobs.<job_id>.strategy.matrix - duddel
我更喜欢使用-DCMAKE_CXX_COMPILER={foo}调用CMake,并在env中定义foo。至少在Travis CI上,直接操作CXX无法使用手动安装的编译器版本(例如GCC-svn或Clang-svn夜间构建)。 - TemplateRex
1
这个答案让我完成了90%的工作,但是我不得不把strategy关键字放在build里面(参见此处),才能使一切正常运行。 - James Smith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接