On 2024-07-01 10:21, Zack Weinberg wrote: > # clue Make that gen-foo also updated foo.h whenever foo.c is new > foo.h: foo.c > @: > > If I had to guess, I would guess that someone thought Make would be > more likely to skip invoking a shell if the command was actually empty > rather than ":". As it happens, GNU Make 4.4.1 appears to recognize > ":" as a no-op; using strace I see it issue the same number of forks > for both constructs. But perhaps older versions of gnumake did not do > this. (This is clearly not a portable makefile to begin with, so > questions of what other implementations do are moot.)
FWIW the POSIX-standard way to define a target rule with no commands it to follow its prerequisites with a semicolon, for example: foo.h : foo.c ; This is supported by literally every make implementation that I am aware of, all the way back to the original make from UNIX V7. Cheers, Nick