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

Windows下Makefile获取Git短哈希命名hex文件失效问题

问题原因

你的配置有3个核心错误,导致功能完全没按预期运行:

  1. 变量根本没被赋值:你写的@echo GIT_TAG = call ./getGitTag.sh只是用echo打印了一行文本,既没有执行getGitTag.sh脚本,也没有把脚本的输出存入GIT_TAG变量,所以这个变量从始至终都是空值。
  2. Windows环境兼容性问题:你手动运行.sh脚本正常,一般是因为你本地装了Git Bash、WSL之类的环境做了脚本关联,但Make在Windows下默认调用cmd.exe作为命令执行环境,cmd本身不识别.sh脚本,直接call根本跑不起来。
  3. 复制命令没有实际执行:你写的cp行前面也加了@echo,同样只是打印了cp这行文字,没有真的执行文件复制操作,从你贴的运行输出里也能看到,cp那行是直接打印出来的内容,不是命令执行的反馈。
修正方案

完全不需要单独维护getGitTag.sh脚本,直接在Makefile里通过内置的shell函数调用git命令取短哈希即可,同时适配Windows cmd环境的命令习惯,修改后的配置如下:

  1. 首先在Makefile中所有用到GIT_TAG的规则之前,提前定义变量,直接抓取8位长度的Git短提交哈希:
# 获取当前HEAD对应的8位短Git提交哈希
GIT_TAG := $(shell git rev-parse --short=8 HEAD)

# 你原有的BUILD_DIR、BINARY、prebuild、postbuild等配置保持不变即可
tag : prebuild postbuild addtag

addtag : $(BUILD_SDIR)/$(BINARY).hex
	@echo  ----------------------------------------
	@echo   Getting Git tag
	@echo  ----------------------------------------
	@echo  GIT_TAG = $(GIT_TAG)
	@echo  ----------------------------------------
	@echo   Adding GIT tag to hex file
	@echo  ----------------------------------------
	# Windows cmd环境原生支持copy命令,兼容性比cp更好
	copy $(BUILD_DIR)\$(BINARY).hex $(BUILD_DIR)\$(BINARY)_$(GIT_TAG).hex
注意事项
  • Makefile规则下的所有命令行必须用Tab键缩进,不能用空格替代,否则Make无法识别为待执行命令。
  • 命令前加@的作用是「执行命令但不在终端打印命令本身」,如果前面加了@echo,就只会打印后面的文本,不会执行文本对应的操作。
  • 如果确实要保留独立的sh脚本,需要在调用时明确指定sh脚本的解释器路径(比如你本地Git安装路径下的bash.exe),示例写法:GIT_TAG := $(shell "C:\Program Files\Git\bin\bash.exe" ./getGitTag.sh),需要把路径替换为你本地的实际Git安装路径,这种方式依赖本地固定安装路径,可移植性比直接内联git命令差,不推荐使用。

内容的提问来源于stack exchange,提问作者bogdan.bodnarescu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 10:09:17