我有这个makefile,它实际上完成了这项工作,但我觉得它并不漂亮。我的目标很简单,当有人第一次调用“make”时,它会同时运行编译和暂存,但是连续调用make,它只会调用compile。如果用户想要运行暂存,则用户必须调用“make staging”。任何人都有更好的主意吗?
all: compile
.PHONY: compile staging
compile:
@echo "compile"
@test -f ./.staging || make ./.staging
force_staging:
@rm -f ./.staging
staging: force_staging compile
@:
./.staging:
@echo "staging"
@touch $@
答案 0 :(得分:0)
我认为您可以在.staging
all: compile
.PHONY: compile
compile: ./.staging
@echo "compile"
force_staging:
@rm -f ./.staging
staging: force_staging compile
@:
./.staging:
@echo "staging"
@touch $@
答案 1 :(得分:0)
这听起来像是order only依赖项的工作:
all: compile
compile: | .staging
echo $@
touch $@
.staging:
echo $@
touch $@
staging: .staging compile
请注意,如果用户make staging
,则.staging
将成为常规目标,并且会在过期时重建。如果用户执行了make all
,那么只有在.staging
不存在时才会重建select
。