Chapter 2. Rules
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
makefiles 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.
|