在GitHub Actions中使用CMake构建ARM64EC项目时编译器缺失问题
解决GitHub Actions构建ARM64EC CMake项目找不到编译器的问题
问题根源
- GitHub Actions的
windows-latest镜像默认未安装ARM64EC相关的VC工具链组件 - 硬编码VS Enterprise路径与镜像中实际安装的VS版本不匹配(镜像默认使用Community版)
- 若VC环境脚本调用失败,后续CMake命令无法获取到正确的编译器路径
解决方案
1. 安装ARM64EC必要组件
在GitHub Actions中添加步骤,安装ARM64EC工具链及依赖组件:
- name: Install ARM64EC VC Tools uses: microsoft/setup-msbuild@v1 with: vs-version: '17.x' components: | Microsoft.VisualStudio.Component.VC.Tools.ARM64EC Microsoft.VisualStudio.Component.VC.Tools.ARM64 Microsoft.VisualStudio.Component.Windows11SDK.22621
2. 动态获取VC环境脚本路径
避免硬编码VS路径,用vswhere自动查找最新VS对应的vcvarsall.bat:
修改构建步骤为:
- name: Build ARM64EC project shell: pwsh run: | # 获取vcvarsall.bat路径 $vcvarsPath = & "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" ` -products * ` -latest ` -requires Microsoft.VisualStudio.Component.VC.Tools.ARM64EC ` -find "VC\Auxiliary\Build\vcvarsall.bat" # 配置交叉编译环境 & $vcvarsPath amd64_arm64 # 执行CMake配置和构建 cmake -B ${{github.workspace}}/build --preset arm64ec cmake --build ${{github.workspace}}/build --config Release
3. 优化CMakePresets配置
调整架构策略,确保CMake正确识别ARM64EC:
{ "version": 5, "configurePresets": [ { "name": "base", "hidden": true, "generator": "Visual Studio 17 2022", "toolset": "v143" }, { "name": "arm64ec", "inherits": "base", "displayName": "ARM64EC", "architecture": { "value": "ARM64EC", "strategy": "external" }, "cacheVariables": { "CMAKE_C_COMPILER": "cl.exe", "CMAKE_CXX_COMPILER": "cl.exe" } } ] }
完整的GitHub Actions配置示例
name: build on: push: branches: [ "main" ] pull_request: branches: [ "main" ] env: BUILD_TYPE: Release jobs: buildWindowsARM64EC: runs-on: windows-latest steps: - uses: actions/checkout@v3 - name: Install ARM64EC VC Tools uses: microsoft/setup-msbuild@v1 with: vs-version: '17.x' components: | Microsoft.VisualStudio.Component.VC.Tools.ARM64EC Microsoft.VisualStudio.Component.VC.Tools.ARM64 Microsoft.VisualStudio.Component.Windows11SDK.22621 - name: Build ARM64EC project shell: pwsh run: | $vcvarsPath = & "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" ` -products * ` -latest ` -requires Microsoft.VisualStudio.Component.VC.Tools.ARM64EC ` -find "VC\Auxiliary\Build\vcvarsall.bat" & $vcvarsPath amd64_arm64 cmake -B ${{github.workspace}}/build --preset arm64ec cmake --build ${{github.workspace}}/build --config Release
内容的提问来源于stack exchange,提问作者Alastair Taylor
相关产品推荐
相关产品推荐

