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
相关产品推荐
相关产品推荐

