我正在设置 GitHub Actions CI/CD 工作流程,需要在 Windows 运行器上安装 gcc 和 g++ 来编译 C/C++ 代码。我希望安装完全自动化,作为 CI/CD 管道的一部分,无需任何手动干预。
我尝试了几种方法:
使用 Chocolatey:这似乎是一个不错的选择,因为 Chocolatey 可以在 Windows 中管理包。我尝试添加一个命令来安装 mingw,其中包括 gcc 和 g++,但我不确定将 MinGW 添加到 GitHub Actions 中的 PATH 的最佳实践。 (但不起作用...)
使用 MSYS2:另一个选择是安装 MSYS2 并使用 pacman 来获取 gcc 和 g++,但感觉有点复杂,并且由于设置步骤可能会减慢 CI/CD 管道的速度。 (但也不起作用...)
我的目标是拥有一个简单的解决方案,在 GitHub Actions 中的 Windows 运行器上安装 gcc 和 g++,这样我就可以编译 C/C++ 文件作为 CI 管道的一部分。这是到目前为止我使用 Chocolatey 在 YAML 文件中得到的内容,但我不完全确定它是否是最佳的:
这是我的跑步者,
name: Build Binary Windows
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [windows-latest]
python-version: [3.8, 3.9, 3.10.x, 3.11, 3.12]
fail-fast: false
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies & Build binary
working-directory: ./tool
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
.\setup.bat
python -m PyInstaller `
--collect-all z3 `
--collect-all pyvex `
--collect-all angr `
--collect-all unicorn `
--collect-all cle `
--onefile --name capierre_binary src/__main__.py
- name: Tests Fonctionnels
working-directory: ./tool
run: |
./launch_tests.bat "fonctionnel"
我的setup.bat是这样的:
@echo off
where choco >nul 2>&1
if %errorlevel% neq 0 (
echo Installation de Chocolatey...
powershell -Command "Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12; Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))"
)
choco install mingw -y
setx PATH "%PATH%;C:\ProgramData\chocolatey\lib\mingw\tools\install\mingw64\bin"
gcc --version
这是最好的方法,还是有更有效的方法在 Windows 上为 GitHub Actions 工作流程设置 GCC 和 G++? MSYS2 会提供更好的兼容性或速度吗?任何建议或改进将不胜感激。谢谢你!
我在我的 yml 文件中使用它:
- name: Setup C/C++ Compiler
id: setup-compiler
uses: rlalik/setup-cpp-compiler@master
with:
compiler: gcc-latest
- name: Verify GCC Installation
run: |
gcc --version
g++ --version