Windows下Makefile中$(shell)执行git命令返回空值的问题
解决思路
指定Git命令的完整路径
Make调用的Shell环境PATH可能没包含Git的路径,直接用Git的绝对路径执行命令试试:# 用Cygwin风格的Git路径 GIT_VERSION := $(shell cd "/cygdrive/c/Users/made/up/filepath" && "/usr/bin/git" describe --always) # 或者Windows原生路径(注意使用正斜杠) GIT_VERSION := $(shell cd "C:/Users/made/up/filepath" && "C:/Program Files/Git/bin/git.exe" describe --always)强制Make使用Git Bash的Shell
把Make的SHELL变量设置为Git Bash的bash路径,确保环境和手动打开Git Bash一致:# Cygwin风格路径 SHELL := /usr/bin/bash # 或者Windows绝对路径 SHELL := "C:/Program Files/Git/usr/bin/bash.exe" GIT_VERSION := $(shell cd "C:/Users/made/up/filepath" && git describe --always)捕获Git命令的错误输出
给Git命令加上错误重定向,看看具体失败原因,比如仓库未初始化、无提交记录等:GIT_VERSION := $(shell cd "C:/Users/made/up/filepath" && git describe --always 2>&1) $(info Git command output: $(GIT_VERSION))如果输出是
fatal: No names found, cannot describe anything,说明仓库还没有任何提交,先完成一次初始提交即可。改用Cygwin风格路径避免转义问题
把Windows路径换成Cygwin格式的路径,避免反斜杠被Make或Shell解析成转义字符:GIT_VERSION := $(shell cd "/cygdrive/c/Users/made/up/filepath" && git describe --always)显式设置PATH环境变量
确保Make的子Shell能找到Git,手动把Git所在目录加入PATH:export PATH := /usr/bin:$(PATH) # 对应Cygwin下的Git路径 # 或者Windows路径 export PATH := "C:/Program Files/Git/bin":$(PATH) GIT_VERSION := $(shell cd "C:/Users/made/up/filepath" && git describe --always)
内容的提问来源于stack exchange,提问作者ACarter
相关产品推荐
相关产品推荐

