我正试图使用"git——漂亮的"Makefile中的格式。
下面是我的Makefile
#CUR_LOC_VERSION:= $(shell git log --pretty=format:%H -n1 -- | grep -o '^.{7}') # works
CUR_LOC_VERSION:= $(shell git log --pretty=format:%H -n1 -- ../inter/local.py | grep -o '^.{7}') # doesn't work, returns empty string
$(info $$CUR_LOC_VERSION is [${CUR_LOC_VERSION}])
我希望它显示一个提交哈希,但它返回空字符串。
$CUR_LOC_VERSION is []
但是,当直接在shell内部运行(而不是通过Makefile调用(时,上面的命令运行良好
非常感谢任何指点。
目录结构
.
|-- inter
| |-- local.py
|
`-- vhdl
|-- Makefile
我无法解释为什么您当前的版本不起作用。但请注意,如果您想获得缩写哈希的特定大小,您可以直接执行该操作,而无需使用grep。刚刚运行:
git log -n1 --format=%h --abbrev=7
%h
格式选项显示一个缩写散列,--abbrev
表示要使用的字符数。
根据上面的更多调查,我怀疑当你运行这个程序时,你的工作目录并不是你想象的那样。如果我运行git log -n1 -- nosuchfile
(使用一个不存在的文件(,我不会像我预期的那样收到任何错误消息;我只是没有输出。这有点令人困惑,但它让我相信,当您运行这个git
命令时,../inter/local.py
并不存在。尝试将pwd
添加到shell
命令中,以便在运行git:之前打印出工作目录
CUR_LOC_VERSION:= $(shell pwd; git log --format=%h -n1 -- ../inter/local.py)
看看输出是什么。