I'm unsure whether this is a bug or just undocumented, but I found a
confusing interaction in a simple Makefile:
> .PHONY: up
> up: down | down-clean
> docker-compose up -d
> .PHONY: up-clean
> up-clean: down-clean up
> .PHONY: down
> down:
> docker-compose down
> .PHONY: down-clean
> down-clean:
@echo "running down-clean"
docker-compose down -v
The interesting parts are up: down | down-clean and up-clean:
down-clean up. Docs
<https://www.gnu.org/software/make/manual/html_node/Prerequisite-Types.html>
state this is how an order-only constraint should be imposed.
My goal here is to ensure order - when running up-clean, down-clean
must be run before up. But if I'm just building up, down-clean should
*not* be built.
However, with both GNU make 3.81 (system, Mac OSX) and GNU make 4.3
(latest, gmake installed from Homebrew), I see this treated like a
normal prerequisite:
$ make up
> docker-compose down
> <...>
running down-clean
docker-compose down -v
Removing volume <...>
This is not the expected behavior. Is this an expected interaction with
.PHONY?
Thanks,
Jacob Kopczynski