Everything is good. The manual says:
bigoutput littleoutput : text.g generate text.g -$(subst output,, $@ ) > $@
equivalently
bigoutput : text.g generate text.g -big > bigoutput littleoutput : text.g generate text.g -little > littleoutput
So your makefile is also equivalent
a : test cp $< $@ b : test cp $< $@
and when you entered the make command, the program built the first target by default, that is, a.
source share