我想在文本文件中保存一些git信息,我想把这些信息放在我的项目的src文件夹中。
如果签出了分支母版,我只需要最近提交的日期。如果有其他分支被签出,我希望分支的日期和名称如下所示:
date-branchname
这是我的密码:
src/version2.txt:
DATE=$(shell git log -1 --date=format:"%Y.%m.%d" --format="%ad")
BRANCH=$(shell git rev-parse --abbrev-ref HEAD)
ifeq ($(BRANCH), 'Master')
$(DATE) > $@
else
DATE+='-'
DATE+=$(BRANCH)
$(DATE) > $@
endif我是GNU的新手,对它的语法非常困惑。我假设我的ifeq/else块运行良好,因为我检查了在version.txt文件中打印一个虚拟文本,同时检查了主或其他分支。我还看到了获取日期或分支的命令没有问题,因为我可以将它们放到文本文件中,如下所示:
git log -1 --date=format:"%Y.%m.%d" --format="%ad" > $@只有当我想使用变量时,变量似乎是空的,例如
$(DATE) > $@ 似乎在文本文件中打印一个空字符串。另外,我不知道我创建日期分支输出的方法是否正确。我花了很多年的时间来尝试,希望能得到一些帮助。谢谢
发布于 2020-07-28 12:52:41
您不能在菜谱中创建GNU变量并在GNU文件中使用它们,因为GNU首先解析整个文件,然后运行菜谱recipes
%
ifeq在中可能会导致问题,因此,我在下面的代码中为它添加了一个解决方案(如果Makefile只对Unix工作,则跳过它)--类似于systems)',不应该在ifeq的常量中使用ifeq (GNU使其读取它不依赖任何东西,因此GNU不会重新生成它(如果它已经存在的话),为目标考虑.PHONY。
试试这个:
BRANCH:=$(shell git rev-parse --abbrev-ref HEAD)
ifeq ($(OS),Windows_NT)
P:=%%
else
P:=%
endif
.PHONY : src/version2.txt
ifeq ($(BRANCH),master)
src/version2.txt :
git log -1 --date=format:"$PY.$Pm.$Pd" --format="$Pad" >$@
else
src/version2.txt :
git log -1 --date=format:"$PY.$Pm.$Pd" --format="$Pad-$(BRANCH)" >$@
endif请注意,即使不应该重新生成BRANCH,每次运行make时也会计算src/version2.txt。
https://stackoverflow.com/questions/63133359
复制相似问题