Make: Build Automation from a Makefile

Make was written by Stuart Feldman at Bell Labs in the mid-1970s. His paper, “Make - A Program for Maintaining Computer Programs,” published in Software: Practice and Experience in 1979, describes a program that keeps track of the relationships between the parts of a program and issues the commands needed to bring the pieces back into a consistent state after a change. The paper notes that make had already been in use on Unix systems since 1975.

The problem make solved is mundane but universal. A large program is built from many source files. Change one file, and some outputs must be rebuilt while others can be left alone. Doing this by hand is slow and error-prone; rebuilding everything wastes time. Make automates the bookkeeping.

The rules live in a file conventionally named Makefile. Each rule names a target, the files it depends on, and the commands that produce it. Make compares timestamps: if a dependency is newer than its target, the target is out of date and the commands are run. By following the chain of dependencies, make rebuilds exactly what is necessary and nothing more.

The idea proved durable. GNU Make, documented on gnu.org, is a free reimplementation that extends Feldman’s design and remains a core part of the Unix and Linux build process decades later. The Makefile, with its targets and dependency lines, is still one of the most recognizable artifacts in software development.