0

我在 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?

4

2 回答 2

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 中。但是将它们放在那里并没有太大的伤害,它可能有助于弄清正在发生的事情以及如何在本地复制构建。如果您对它的工作原理感兴趣,可以查看手册页以获取 update-alternatives 。

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

于 2021-06-01T14:47:22.227 回答
1

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

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++ 编译器。

于 2021-06-04T00:49:36.870 回答