替代此规则调用makefile上的规则

时间:2016-10-30 07:29:17

标签: makefile

我有这个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 $@

2 个答案:

答案 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