 builds executable programs and libraries from source code by reading files
called Makefiles which specify how to derive the target program.
A Makefile consists of a set of recursive rules where each rule
specifies a target, its dependencies,
and the specific operations required to build the target.
Specifying dependencies for a target provides a way to control
the build process so that targets which depend on other files will
be updated as needed <em>only</em> when there are changes to those other files.
T