【问题标题】:How can I use a recent version of GCC in GitHub CI?如何在 GitHub CI 中使用最新版本的 GCC?
【发布时间】:2021-08-06 09:59:15
【问题描述】:

我在 GitHub 上有一个使用 GitHub CI 的 C++ 项目。我的工作流程通过strategy 属性配置为在 Linux 和 Windows 上运行:

runs-on: ${{ matrix.os }}
strategy:
  matrix:
    os: [ubuntu-latest, windows-latest]

到目前为止,这对我来说效果很好,Cmake 将编译器识别为GNU 9.3.0。但是,我现在想在我的项目中使用 GCC 10 中添加的实验性功能,因此我的构建由于旧的编译器版本而失败。

如何从我的 GitHub CI 工作流程中使用更新版本的 GCC?

【问题讨论】:

    标签: github gcc cmake continuous-integration github-ci


    【解决方案1】:

    对于 linux 构建,您可以使用以下构建步骤将默认 gcc 切换为 gcc-10。

    - name: switch to gcc-10 on linux
      if: matrix.configurations.os == "ubuntu-latest"
      run: |
        sudo apt install gcc-10 g++-10
        sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100 --slave /usr/bin/g++ g++ /usr/bin/g++-10 --slave /usr/bin/gcov gcov /usr/bin/gcov-10
        sudo update-alternatives --set gcc /usr/bin/gcc-10
    

    脚本的前两行应该是可选的,因为 gcc-10 已经安装在 ubuntu-latest 中。但是将它们放在那里并没有太大的伤害,它可能有助于弄清正在发生的事情以及如何在本地复制构建。 如果您对它的工作原理感兴趣,可以查看manpage for update-alternatives

    windows-latest 使用 visual-studio 作为它的默认编译器,但由于您只询问 gcc,我想它已经支持您正在使用的 c++ 功能?

    【讨论】:

    • 我明白了,谢谢。这个答案有效并且很好地解决了这个问题,所以我会接受它。我最终走向了一个稍微不同的方向,因为事实证明 gcc-10 和 gcc-11 在我需要的功能中存在错误:)
    【解决方案2】:

    @wirew0rm​​ 发布了一个很好的答案,一般来说效果很好。需要注意的是,允许在 GitHub CI 运行器上使用sudo,因此只需安装所需的包:

    sudo apt install gcc-10 g++-10
    
    # or
    sudo apt install gcc-11 g++-11
    
    # or, for very recent Clang:
    wget https://apt.llvm.org/llvm.sh
    chmod +x llvm.sh
    sudo ./llvm.sh 12
    sudo apt-get install libc++-12-dev libc++abi-12-dev
    

    然后,因为我使用的是 CMake,我可以设置 CXX 环境变量而不是使用 sudo update-alternatives

    echo "CXX=g++-10" >> $GITHUB_ENV
    

    随后的 CMake 配置步骤将选择 g++-10 作为 C++ 编译器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-30
      • 2016-05-28
      • 2017-01-23
      • 2021-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多