首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用GNU-make变量安全文件中的git信息?

如何使用GNU-make变量安全文件中的git信息?
EN

Stack Overflow用户
提问于 2020-07-28 11:44:25
回答 1查看 69关注 0票数 0

我想在文本文件中保存一些git信息,我想把这些信息放在我的项目的src文件夹中。

如果签出了分支母版,我只需要最近提交的日期。如果有其他分支被签出,我希望分支的日期和名称如下所示:

date-branchname

这是我的密码:

代码语言:javascript
复制
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文件中打印一个虚拟文本,同时检查了主或其他分支。我还看到了获取日期或分支的命令没有问题,因为我可以将它们放到文本文件中,如下所示:

代码语言:javascript
复制
git log -1 --date=format:"%Y.%m.%d" --format="%ad" > $@

只有当我想使用变量时,变量似乎是空的,例如

代码语言:javascript
复制
$(DATE) > $@ 

似乎在文本文件中打印一个空字符串。另外,我不知道我创建日期分支输出的方法是否正确。我花了很多年的时间来尝试,希望能得到一些帮助。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-28 12:52:41

您不能在菜谱中创建GNU变量并在GNU文件中使用它们,因为GNU首先解析整个文件,然后运行菜谱recipes

  • %

  • 您不能在命令行中使用GNU ifeq在中可能会导致问题,因此,我在下面的代码中为它添加了一个解决方案(如果Makefile只对Unix工作,则跳过它)--类似于systems)
  1. ',不应该在ifeq的常量中使用ifeq (GNU使其读取它不依赖任何东西,因此GNU不会重新生成它(如果它已经存在的话),为目标

考虑.PHONY

试试这个:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63133359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档