next up previous contents
Nästa: 13.4 Kommandon Upp: 13. Att få något Förra: 13.2 Regler

13.3 Bluffmål

Om vi hade haft otur och det funnits en fil med namnet utskrift som var nyare än filen gnulinux.ps, så skulle vi inte få vår utskrift. Detta är kanske inte vad man önskar. Men det finns ett sätt att gardera sig mot sådan otur. Om man har med en regel med namnet .PHONY och med utskrift som delmål, så struntar make i om det finns någom fil med namnet utskrift eller inte. Därigenom försäkrar man sig om att kommandona i målet alltid utförs.

Ofta tar man i sin Makefile med ett mål som gör att make kan städa upp efter sig. Detta mål brukar heta clean och har till syfte att radera alla eller en del av de filer som tillverkas automatiskt i de andra målen. I vårt exempel kan man låta clean radera gnulinux.log, gnulinux.aux och alla kopior som Emacs har gjort (de filer vars namn slutar med ett tilde), samt eventuellt också gnulinux.dvi och gnulinux.ps. Målet clean bör naturligtvis också sättas under .PHONY.

Om man ger kommandot make utan att specificera något mål, så tar make hand om det första målet i Makefile. Därför kan man sätta det mål man vanligtvis vill uppnå först. Fast det finns ett annat standardsätt att göra detta på: man brukar ha ett mål med namnet all överst i Makefile, och som delmål till all anges det eller de mål man oftast vill få utförda.

Vi ändrar alltså vår Makefile till

all: gnulinux.ps

.PHONY: all utskrift clean

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

clean:
        rm *~ gnulinux.{dvi,ps,aux,log}
Och så provar vi hur det fungerar!$ ls
Makefile          gnulinux.dvi      gnulinux.tex
definitioner.tex  gnulinux.log      unix.tex
gnulinux.aux      gnulinux.ps       unix.tex~
$ make clean
rm *~ gnulinux.{dvi,ps,aux,log}
$ ls
Makefile          gnulinux.tex
definitioner.tex  unix.tex
$ make
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] (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.18:0050' -> gnulinux.ps
<tex.pro>. [1] [2]
$ make
make: Nothing to be done for `all'.
$
Ja, make clean rensar bort alla skräpfiler. Och make uppdaterar målet gnulinux.ps via all. Sista gången vi körde make ovan var gnulinux.ps redan uppdaterad, och all fick inget att göra.


next up previous contents
Nästa: 13.4 Kommandon Upp: 13. Att få något Förra: 13.2 Regler
Goran Andersson
1999-03-08