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

Ste*_*sku 2 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
Run Code Online (Sandbox Code Playgroud)

但是如果我把它放在规则体中则不是:

$ 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
Run Code Online (Sandbox Code Playgroud)

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

mer*_*011 7

是的,如果您尝试设置Makefile变量,可以使用eval函数来完成.

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