On Tue, 2022-11-01 at 22:51 +0100, Frank Heckenbach wrote: > That's why I only suggested a warning since it may be un expected > (especially with ".WAIT") or unintended (even in your example at the > end, why would one put "pause" twice intentionally).
I see. We can't do this; there are tons of ways that duplicate targets can end up in the prerequisites of a target: by having them in variables, or multiple different makefiles that define extra prerequisites, etc. Most importantly, they are sometimes required! For example if you need to link a given library twice to resolve symbols when two libraries reference each other: prog: foo.o -lbar -lfoo -lbar This is why we have $^ vs. $+ automatic variables. Adding a warning like this in general will definitely cause a lot of annoyance and frustration. I agree that .WAIT is a new feature but I still don't think it's a good idea; we can still have situations where due to variable expansion or extra targets defined the same target ends up in the prerequisites list twice. Maybe if in the future we add a warning mode with things that can be enabled/disabled (something I've been considering after years of answering mostly the same questions on StackOverflow) this might belong there, at least in some specific situations.