将Makefile变量设置为规则中的命令结果

时间:2016-01-19 23:13:48

标签: git makefile

我正在尝试将命令的结果分配给GNU make中的变量。如果我在规则之外做的话,它可以工作:

$ cat stack.mk
GIT_BRANCH=$(shell git rev-parse --abbrev-ref HEAD)

all:
    @echo Git branch is $(GIT_BRANCH)

$ make -f stack.mk all
Git branch is dev

但如果我把它放在规则体中,那就不行了:

$ cat stack.mk
all:
    export GIT_BRANCH=$(shell git rev-parse --abbrev-ref HEAD)
    @echo Git branch is $(GIT_BRANCH)

$ make -f stack.mk all
export GIT_BRANCH=dev
Git branch is

是否可以在规则中分配变量。此时我想将几个git命令的结果分配给shell / Makefile变量。

1 个答案:

答案 0 :(得分:6)

是的,如果您尝试设置Makefile变量,可以使用eval函数执行此操作。

all:
    $(eval GIT_BRANCH=$(shell git rev-parse --abbrev-ref HEAD))
    echo Git branch is $(GIT_BRANCH)