secondly, working around this was never very hard, albeit ugly: pretend your rule builds just one of the targets and have the other products depend on that one and simply touch themselves up to its timestamp.
https://www.gnu.org/software/automake/manual/html_node/Multi...
Definitely not handled "simple and well" as posited by the OP.
Some rather obscure makes that you and I will never get to use have had the feature.
GNU Make has, for a long time, supported multiple outputs in pattern rules. Pattern rules have the limitation that the files involved have to be organized around a common stem. If you can make your situation fit this restriction, then you can effectively have multi-target rules by way of pattern instantiation, and this will work with even old versions of GNU Make.
Some two months ago I added the feature to GNU Make to express direct rules with multiple outputs.
http://git.savannah.gnu.org/cgit/make.git/commit/?id=8c888d9...
So bleeding edge GNU Make lets you do:
y.tab.c y.tab.h y.output &: parser.y ...
It had to be done via a bit of new syntax because x y z : w
already has a meaning: it means that x, y and z independently depend on w, not as a group built together.
Last I checked, make only handled dependencies with multiple inputs and a single output.
If your build step's command produced more than one output and you wanted to model that in your DAG you had to resort to some questionable incantations that never really worked perfectly (or rely on non portable constructs).