我有一个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
答案 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
之后。