|  In the last chapter, we wrote some rules to compile and link our word-counting program. Each of those rules defines a target, that is, a file to be updated. Each target file depends on a set of prerequisites, which are also files. When asked to update a target,  make  will execute the command script of the rule if any of the prerequisite files has been modified more recently than the target. Since the target of one rule can be referenced as a prerequisite in another rule, the set of targets and prerequisites form a chain or graph of  dependencies  (short for "dependency graph"). Building and processing this dependency graph to update the requested target is what  make  is all about.   Since rules are so important in  make  , there are a number of different kinds of rules.  Explicit rules  , like the ones in the previous chapter, indicate a specific target to be updated if it is out of date with respect to any of its prerequisites. This is the most common type of rule you will be writing.  Pattern rules  use wildcards instead of explicit filenames. This allows  make  to apply the rule any time a target file matching the pattern needs to updated.  Implicit rules  are either pattern rules or suffix rules found in the rules database built-in to  make  . Having a built-in database of rules makes writing  makefile  s easier since for many common tasks  make  already knows the file types, suffixes, and programs for updating targets.  Static pattern rules  are like regular pattern rules except they apply only to a specific list of target files.   GNU  make  can be used as a "drop in" replacement for many other versions of  make  and includes several features specifically for compatibility.  Suffix rules  were  make  's original means for writing general rules. GNU  make  includes support for suffix rules, but they are considered obsolete having been replaced by pattern rules that are clearer and more general.  |