GNU make - 强制 PHONY 目标的依赖顺序

2024-04-01

我有一个如下的 Makefile,我关心的是依赖顺序up-clean:

.PHONY: up
up: down
    docker-compose up -d

.PHONY: up-clean
up-clean: down-clean up

.PHONY: down
down:
    docker-compose down

.PHONY: down-clean
down-clean:
    docker-compose down -v

显然,重要的是在up-clean: down-clean up, down-clean must之前被执行up。对于普通的 make 目标,解决方案是添加一个条目,up: down-clean,但由于这些是假目标,这会使up功能上等同于up-clean,每次都删除卷。显然,这是不可接受的。

在实践中,GNU make 尊重依赖关系的顺序,但它不保证它,因此并不完全值得信赖,或者与-j根本不值得信赖。在这种情况下,有什么方法(如果有的话)可以确保依赖项的执行顺序而不改变构建其他目标的结果?

编辑:尝试使用仅订单先决条件 https://www.gnu.org/software/make/manual/html_node/Prerequisite-Types.html似乎不起作用,可能是因为与.PHONY. Adding

up: | down-clean

导致执行日志为:

$ make up
docker-compose down
<...>
docker-compose down -v
Removing volume <...>

这是应该发生的事情normal先决条件,而不是仅限订单的条件。


最简单的答案是使用 make 的递归调用:

up-clean:
        $(MAKE) down-clean
        $(MAKE) up
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GNU make - 强制 PHONY 目标的依赖顺序 的相关文章

随机推荐