From 78595f1bd9a49a34ca3f432e5a591ba437c87820 Mon Sep 17 00:00:00 2001 From: buenosairesam Date: Wed, 19 Aug 2026 02:55:06 -0300 Subject: [PATCH] Declare pass-through words PHONY in the Makefile MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `make build ctrl` ran the build and then printed "make: 'ctrl' is up to date." The empty rule from $(eval $(ARGS):;@:) is not enough when the word names a real directory — and cfg, ctrl, docs, gen and init all exist at this level. Only .PHONY stops make consulting the filesystem. Co-Authored-By: Claude Opus 5 (1M context) --- Makefile | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Makefile b/Makefile index 1a0d12c..a4f1c27 100644 --- a/Makefile +++ b/Makefile @@ -33,6 +33,12 @@ ifneq ($(ARGS),) # then fails with "No rule to make target 'sample'", because make reads every # word on the line as something it has been asked to build. $(eval $(ARGS):;@:) +# ...and as PHONY, because some of those words name real directories. `cfg`, +# `ctrl`, `docs`, `gen` and `init` all exist at this level, and make considers a +# target that is an existing directory already built — so `make build ctrl` ran +# the build and then printed "make: 'ctrl' is up to date". The empty rule above +# is not enough on its own; only .PHONY stops make consulting the filesystem. +.PHONY: $(ARGS) endif .DEFAULT_GOAL := help