Antag att vi arbetar med ett LATEX-dokument som är uppdelat på flera filer: huvudfilen gnulinux.tex samt definitioner.tex och unix.tex. Innan dokumentet kan tryckas är det flera saker som måste göras. Först ska det typsättas av LATEXmed kommandot latex gnulinux.tex. Då skapas filen gnulinux.dvi. Denna fil översätts sedan till postscript så att skrivaren kan ta emot den. Kommandot dvips -o gnulinux.ps gnulinux.dvi. skapar postscriptfilen gnulinux.ps, som skrivs ut med kommandot lpr gnulinux.ps.
Alla dessa steg är tröttsamma att gå igenom, och det är lätt hänt att man gör fel i något av stegen. Varje gång man gör en ändring i någon av sina LATEX-filer måste dessutom alla eller vissa av stegen göras om. Slutsatsen blir att det borde finnas ett program, tex med namnet make, som gör arbetet åt en. Slutsatsen är korrekt: det finns ett sådant program.
För att få hjälp av make med en viss syssla ska man i en fil med namnet Makefile beskriva sysslan. När denna fil väl är skapad, så räcker det att skriva make mål varje gång man vill få sysslan mål utförd. Denna syssla kan, som i exemplet ovan, vara att typsätta och trycka ett dokument. Det kan också vara att kompilera ett program. Man kan inte få hjälp med att koka kaffe, men faktum är att många vitt skilda sysslor som kan utföras av ett antal Bash-kommandon kan automatiseras med hjälp av make. Frågan är nu hur en Makefile ser ut. Resten av detta kapitel ägnas åt att besvara den frågan.
En Makefile som tar hand om typsättningen som beskrivs ovan kan se ut så här:
gnulinux.dvi: gnulinux.tex definitioner.tex unix.tex
latex gnulinux.tex
gnulinux.ps: gnulinux.dvi
dvips -o gnulinux.ps gnulinux.dvi
utskrift: gnulinux.ps
lpr gnulinux.ps
Filen ovan innehåller tre regler.
Den första regeln säger att filen gnulinux.dvi skapas
från filerna gnulinux.tex, definitioner.tex
och unix.tex med kommandot latex gnulinux.tex.
Den andra regeln talar om hur gnulinux.ps
skapas från gnulinux.dvi. Den sista regeln
anger hur filen gnulinux.ps skrivs ut.
Låt oss prova!$ ls
Makefile definitioner.tex gnulinux.tex unix.tex
latex gnulinux.tex
This is TeX, Version 3.14159 (C version 6.1)
(gnulinux.tex
LaTeX2e <1996/12/01>
Babel <v3.6h> and hyphenation patterns for american, swedish, loaded.
(/usr/lib/texmf/tex/latex/base/book.cls
Document Class: book 1996/10/31 v1.3u Standard LaTeX document class
(/usr/lib/texmf/tex/latex/base/bk12.clo)) (definitioner.tex)
No file gnulinux.aux.
[1] [2] (gnulinux.aux) )
(see the transcript file for additional information)
Output written on gnulinux.dvi (2 pages, 1040 bytes).
Transcript written on gnulinux.log.
dvips -o gnulinux.ps gnulinux.dvi
This is dvipsk 5.58f Copyright 1986, 1994 Radical Eye Software
' TeX output 1997.11.17:1447' -> gnulinux.ps
<tex.pro>. [1] [2]
lpr gnulinux.ps
Låt oss göra en ny utskrift:$ ls
Makefile gnulinux.aux gnulinux.log gnulinux.tex
definitioner.tex gnulinux.dvi gnulinux.ps unix.tex
$ make utskrift
lpr gnulinux.ps
$Som synes struntade make denna gång i att köra
latex och dvips, filen gnulinux.ps
skrevs ut direkt. På något magiskt sätt
(som vi snart ska förklara) visste make att
filen gnulinux.ps var ''up to date'' och
att det var onödigt att köra latex igen.
Hmm, antag att vi ändrat lite i tex unix.tex
och sedan provar igen:$ ls -t
unix.tex gnulinux.aux gnulinux.tex
gnulinux.ps gnulinux.dvi unix.tex~
gnulinux.log Makefile definitioner.tex
$ make utskrift
latex gnulinux.tex
This is TeX, Version 3.14159 (C version 6.1)
(gnulinux.tex
LaTeX2e <1996/12/01>
Babel <v3.6h> and hyphenation patterns for american, swedish, loaded.
(/usr/lib/texmf/tex/latex/base/book.cls
Document Class: book 1996/10/31 v1.3u Standard LaTeX document class
(/usr/lib/texmf/tex/latex/base/bk12.clo)) (definitioner.tex) (gnulinux.aux)
[1] (unix.tex) [2] (gnulinux.aux) )
(see the transcript file for additional information)
Output written on gnulinux.dvi (2 pages, 2328 bytes).
Transcript written on gnulinux.log.
dvips -o gnulinux.ps gnulinux.dvi
This is dvipsk 5.58f Copyright 1986, 1994 Radical Eye Software
' TeX output 1997.11.17:1524' -> gnulinux.ps
<tex.pro>. [1] [2]
lpr gnulinux.ps
$Nu körde make återigen latex och dvips
före lpr.