# There is no correct way to write a rule that generates two files. # Rules with two targets don't have that meaning, they are merely # shorthand for two otherwise separate rules. If we have an action # that in fact generates two or more files, we must choose one of them # as primary and show it as the action's output, then make all of the # other output files dependent on the primary, like this. Furthermore, # the "touch" action is essential, because it ensures that gram.h is # marked as newer than (or at least no older than) gram.c. Without that, # make is likely to try to rebuild gram.h in subsequent runs, which causes # failures in VPATH builds from tarballs.