next up previous contents
Nästa: 13.3 Bluffmål Upp: 13. Att få något Förra: 13.1 Introduktion

13.2 Regler

Reglerna i en Makefile är av formen

mål:  delmål1 delmål2 ...
        kommando
        kommando
        ...
Regeln inleds med namnet på ett mål för make. Vanligtvis är namnet på målet identiskt med namnet på en fil som regeln är till för att skapa. Vår första regel i exemplet ovan har som mål gnulinux.dvi, och regeln är till för att skapa filen gnulinux.dvi.

Efter namnet på målet ska man skriva ett kolon, och därefter på samma rad alla eventuella delmål, dvs mål som måste uppnås innan det angivna målet kan uppnås. För att klara av ett delmål letar make först efter en regel som talar om hur det uppnås, och om det finns ett sådant så tar make hand om det först. Om det inte finns en regel för delmålet, så försöker make finna en fil med samma namn som delmålet; finns det inte heller någon sådan fil, så klagar make över att ''det finns ingen regel för att göra målet xxx, som behövs för målet yyy'' och körningen avbryts.

Efter raden som anger målet kan man ha ett eller flera kommandon som ska utföras för att målet ska uppnås. Före varje kommando måste det finnas ett tabulatorsteg. (Det går inte att skriva några mellanslag i stället. I början gör man ofta fel på detta.)

Kommandona utförs inte automatiskt, utan bara om make anser att målet inte är ''up to date''. Det kan finnas olika skäl till att målet måste uppdateras:

När vi i avsnitt 13.1 första gången gav kommandot make utskrift, så betraktade make först delmålet gnulinux.ps. Det fanns en regel för gnulinux.ps, som make gick till. Där betraktades delmålet gnulinux.dvi, så make hoppade till regeln gnulinux.dvi. Delmålen där, de tre LATEX-filerna, fanns det ingen regel för, men däremot fanns de som filer i den aktuella katalogen. Alltså var delmålen till gnulinux.dvi klara, men eftersom det inte fanns någon fil med namnet gnulinux.dvi körde make kommandot i regeln gnulinux.dvi. Därmed var filen gnulinux.dvi skapad och motsvarande mål uppnått. Sedan återvände make till gnulinux.ps och körde kommandot i den regeln eftersom dess delmål hade uppdaterats (men också för att det filen gnulinux.ps inte fanns). Nu var också målet gnulinux.ps klart, och make återvände till målet utskrift vars kommandon kördes eftersom det inte fanns någon fil med det namnet (och för att delmålet hade uppdaterats).

Den andra gången vi gav kommandot make utskrift gick make till delmålen gnulinux.ps och gnulinux.dvi. Målet gnulinux.dvi behövde inte uppdateras eftersom det fanns en fil med detta namn som också var nyare än alla dess delmål. Inte heller gnulinux.ps behövde uppdateras eftersom den var nyare än gnulinux.dvi. Däremot kördes kommandona i målet utskrift eftersom det inte fanns någon fil med namnet utskrift.

Den tredje gången vi körde make utskrift gick make återigen till delmålen gnulinux.ps och gnulinux.dvi. Den här gången var ett av delmålen till gnulinux.dvi nyare än filen gnulinux.dvi, så make körde kommandot i målet gnulinux.dvi. Därmed måste även gnulinux.ps uppdateras före utskriften.

Här är ett nytt exempel:$ make gnulinux.ps
make: `gnulinux.ps' is up to date.
$ touch gnulinux.dvi
$ make gnulinux.ps
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]
$
Första gången vi ger kommandot make gnulinux.ps ovan är filen gnulinux.ps nyare än gnulinux.dvi, så make uppdaterar den inte. Men om vi med kommandot touch petar på gnulinux.dvi så att det ser ut som om den ändrats, så blir den nyare än gnulinux.ps och då tror make att gnulinux.ps behöver uppdateras.


next up previous contents
Nästa: 13.3 Bluffmål Upp: 13. Att få något Förra: 13.1 Introduktion
Goran Andersson
1999-03-08