You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Actions中CMake用FetchContent时找不到Git的问题排查

问题排查与解决方案

针对你在GitHub Actions中遇到的could not find git for clone of ppcdisasm-populate错误,从几个核心方向排查:

1. 确保GIT_EXECUTABLE设置时机正确

CMake的FetchContent_Populate(或FetchContent_MakeAvailable)会启动临时子进程执行克隆操作,如果你在FetchContent_Declare之后才设置GIT_EXECUTABLE,这个变量不会传递到子进程中。必须在所有FetchContent相关命令之前设置:

# 先指定git路径,再拉取依赖
set(GIT_EXECUTABLE "/usr/bin/git" CACHE PATH "Path to git executable")
FetchContent_Declare(
  ppcdisasm
  GIT_REPOSITORY https://github.com/your-repo/ppcdisasm.git
  GIT_TAG main
)
FetchContent_MakeAvailable(ppcdisasm)

2. 升级CMake版本(关键)

旧版CMake(3.19及更早)存在FetchContent子进程变量传递的bug,即使主进程设置了GIT_EXECUTABLE,子进程也读取不到。在GitHub Actions里直接指定新版CMake:

- name: Setup CMake
  uses: actions/setup-cmake@v2
  with:
    cmake-version: "3.25.x" # 选择3.20以上的稳定版本

3. 验证git在构建环境的可用性

虽然which git返回了路径,但要确保CMake运行时能访问到。在workflow的构建步骤前添加验证:

- name: Verify git
  run: |
    which git
    git --version

同时在CMakeLists.txt里打印变量确认:

message(STATUS "Current GIT_EXECUTABLE: ${GIT_EXECUTABLE}")
FetchContent_MakeAvailable(ppcdisasm)

如果打印的路径为空或错误,说明变量没正确生效。

4. 清理CMake缓存

如果workflow启用了缓存,旧缓存可能保留了错误的git配置。构建前清理缓存:

- name: Clean CMake artifacts
  run: rm -rf build/ CMakeCache.txt CMakeFiles/

内容的提问来源于stack exchange,提问作者user19742600

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 20:45:42