A typical Makefile is composed of three basic constructs: comments, variable definitions and rules. Any line beginning with a # character is considered to be a comment line. Comment lines are ignored by the Make program. Variables (also known as macros) and rules are complicated topics and they will be discussed in separate sections.
The Makefile is written to define the rules for making a goal up-to-date. A goal file is up-to-date if it has a modification datestamp that is more recent than all of its dependents, after all dependents are updated with respect to their dependents. This criterion is applied recursively, such that the most deeply nested dependent will be made before any target file that depends on it.