在makefile变量

时间:2017-03-24 20:45:17

标签: git awk makefile

我正在编写一个Makefile,并希望将一个变量中的当前分支名称捕获到--define中。 由于脚本有时但并不总是在travis上运行,因此git存储库可能处于分离状态。

我可以在命令行中提取分支名称,但遗憾的是不能在变量中捕获它。似乎print $$ 2在Makefile环境中不起作用。

我现在的行是:

BRANCH := $(shell git for-each-ref --format='%(objectname) %(refname:short)' refs/heads | awk "/^$$(git rev-parse HEAD)/ {print $$2}")

我得到了

dfd943a57015dbd2129ca7b7033c4e1749f18974 BRANCH_NAME 

而不仅仅是

 BRANCH_NAME

2 个答案:

答案 0 :(得分:2)

接受的答案有一个问题是可靠地提取分支名称(哈希是好的)。如果当前HEAD提交是多个分支的当前头部,那么BRANCH的值将是“branch1 branch2”,这将在Makefile中产生意外结果。

只需使用:

BRANCH := $(shell git rev-parse --abbrev-ref HEAD)
HASH := $(shell git rev-parse HEAD)

答案 1 :(得分:0)

最适合我的是:

BRANCH := $(shell git for-each-ref --format='%(objectname) %(refname:short)' refs/heads | awk "/^$$(git rev-parse HEAD)/ {print \$$2}")
HASH := $(shell git rev-parse HEAD)

然后可以使用那些变量,例如与$(BRANCH)