如何在 GitHub CI 中使用最新版本的 GCC?
How can I use a recent version of GCC in GitHub CI?
我在 GitHub 上有一个 C++ 项目,我使用 GitHub CI。我的工作流程配置为 运行 on Linux 和 Windows 通过 strategy
属性:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
到目前为止,这对我来说效果很好,Cmake 将编译器识别为 GNU 9.3.0
。但是,我现在想在我的项目中使用 GCC 10 中添加的实验性功能,因此由于旧的编译器版本,我的构建失败了。
如何在我的 GitHub CI 工作流程中使用更新版本的 GCC?
对于 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++ 功能了?
@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 配置步骤将 select g++-10 作为 C++ 编译器。
我在 GitHub 上有一个 C++ 项目,我使用 GitHub CI。我的工作流程配置为 运行 on Linux 和 Windows 通过 strategy
属性:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
到目前为止,这对我来说效果很好,Cmake 将编译器识别为 GNU 9.3.0
。但是,我现在想在我的项目中使用 GCC 10 中添加的实验性功能,因此由于旧的编译器版本,我的构建失败了。
如何在我的 GitHub CI 工作流程中使用更新版本的 GCC?
对于 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++ 功能了?
@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 配置步骤将 select g++-10 作为 C++ 编译器。