对目标的仅订购先决条件强加订单

时间:2018-08-28 09:03:36

标签: makefile dependencies gnu-make target prerequisites

我有一个makefile片段:

all: $(objects) 
fresh: all | clean directory
directory: ;mkdir -p OutputDirectory
clean: ;rm $(objects); rm -rf OutputDirectory

在这里,我要确保在执行make fresh-clean之后应该是directory,然后是all

从语义上讲,clean仅作为订购的先决条件可能没有意义。将其假定为必须按一定顺序执行的order only dependency


以下链接显示了类似的问题,但具有正常的依赖性: makefile - Impose an order for the prerequisites of a target - Stack Overflow

1 个答案:

答案 0 :(得分:2)

fresh的食谱中,您可以在同一makefile上两次递归调用make,以创建目录的目标和all的目标,分别为:

# At the very beginning of the makefile
CURRENT_MAKEFILE :=  $(lastword $(MAKEFILE_LIST))
# ...

.PHONY: all clean fresh

directory := OutputDirectory

all: $(objects) 
fresh: clean
    $(MAKE) -f $(CURRENT_MAKEFILE) $(directory)
    $(MAKE) -f $(CURRENT_MAKEFILE) all

$(directory): ;mkdir -p $@
clean: ;rm -f $(objects); rm -rf $(directory)

通过这种方式,目标all在目标$(directory)之前,目标clean rm -rf node_modules npm i react react-router-dom --save 之后。