Correct myself.
If object file `n.o` is mentioned in prerequisite, it is compiled using implicit rule without requiring us to write `n.o: n.c`. If executable file `x` is named after stem of one of object or source files, it is linked using implicit rule without requiring us to write `x: x.o`. Additional prerequisites `x: y.o z.o` are merged into `x: x.o y.o z.o`, and duplicated prerequisites `x: x.o x.o` are only kept once `x: x.o y.o z.o`.
