D. J. Bernstein
Data structures and program structures

Rebuilding target files when source files have changed

The redo program

Rebuilding target files atomically

Notes on honest prerequisites

Target files depend on build scripts
Target files depend on nonexistent files
Files in other directories are targets