这是我的Makefile。
ifeq ($(BRANCH), )
BRANCH := $(shell git rev-parse --abbrev-ref HEAD)
endif
ifeq ($(COMMIT), )
COMMIT := $(shell git rev-parse --abbrev-ref HEAD)
endif
all:
ifeq ($(BRANCH), )
$(error Please pass a valid branch)
endif
ifeq ($(COMMIT), )
$(error Please pass a valid commit)
endif
echo $(BRANCH) $(COMMIT)
rm -f server-test
我希望用户能够使用make命令传递参数BRANCH和COMMIT,并在用户不传递这些参数时将其设置为默认值。如果我使用make
或make BRANCH=master
。但如果用户使用make BRANCH=
或make BRANCH=""
,则给出错误。我不明白的部分是我使用相同的检查设置变量和抛出错误。为什么它在if块的一个地方而不是另一个地方?
如果用户没有将变量传递给Makefile
,我试图有条件地将变量设置为默认值问题是:
BRANCH := $(shell ...)
不像你期望的那样工作。从手册页:
If a variable has been set with a command argument,
then ordinary assignments in the makefile are ignored.
因此,如果您运行make BRANCH=
或make BRANCH=""
,那么您已经将该变量的值设置为空字符串。当您尝试为其分配新值时,它仍然为空,并触发错误。解决方案在同一页:
override BRANCH := $(shell ...)