The recompilation must be done if the source file, or any of the header files named as dependencies, is more recent than the object file, or if the object file does not exist. The other rules are processed because their targets appear as dependencies of the goal. Before recompiling an object file, make considers updating its dependencies, the source file and header files. But make would update automatically generated C programs, such as those made by Bison or Yacc, by their own rules at this time. We can eliminate the risk and simplify the makefile by using a variable.
Variables allow a text string to be defined once and substituted in multiple places later.
We can therefore omit the commands from the rules for the object files. This is how we would write the makefile in actual practice. Because implicit rules are so convenient, they are important. You will see them used frequently. Rules for Cleaning the Directory Compiling a program is not the only thing you might want to write rules for.