Makefile
Makefile on make-ohjelman tekstimuotoinen määrittelytiedosto. Tiedosto sisältää yleensä ohjeet ohjelmointikielen kääntäjän ja sen apuohjelmien kuten linkkerin käyttöön, joilla lähdekoodista tuotetaan toimiva tietokoneohjelma tai kirjasto. Make ei ole sidottu ohjelmien kääntämiseen. Makefile voisi sisältää komennot esim. dokumenttien muotoiluun LaTeXilla tai MP3-tiedostojen tuottamiseen WAV-äänitiedostoista.
Makefile-tiedoston rakenteelle on POSIX-määrittely, mutta historiallisesti on ollut eri versioita sekä uudelleensuunniteltuja vaihtoehtoja samasta konseptista.[1]
Tiedoston rakenne
[muokkaa | muokkaa wikitekstiä]Tiedostossa kerrotaan kohde, joka halutaan tuottaa, sen vaatimat riippuvuudet ja tarvittavat komennot.
kohde: riippuvuudet
komennot
Kohteina voi tyypillisesti olla all, joka suorittaa koko käännöksen, ja clean, joka siivoaa käännöksen aikana tuotetut väliaikaiset tiedostot kuten objektitiedostot poistamalla ne. Kohde voi riippua toisista kohteista, joilla on omat käännöskomennot.
Esimerkiksi A:n käännös voi riippua B:n ja C:n kääntämisestä, joista B voi riippua taas D:n ja E:n kääntämisestä:
A: B C
cmd_A
B: D E
cmd_B
Lisäksi tiedostossa voi olla muun muassa ympäristömuuttujien määrittelyjä toistuvien osien vähentämiseen. Esimerkiksi tyypillisesti käytettävän kääntäjän nimi asetetaan ympäristömuuttujaan CC
, jotta sitä ei tarvitse toistaa tiedostossa.
Esimerkki
[muokkaa | muokkaa wikitekstiä]CC = cc
LD = ld
prog: foo.o bar.o
$(LD) -o prog foo.o bar.o
foo.o: foo.c
$(CC) -c foo.c
bar.o: bar.c
$(CC) -c bar.c
Esimerkissä kääntäjäohjelma asetetaan muuttujaan CC
, linkkeriohjelma muuttujaan LD
, joita käytetään käännösvaiheissa.
Ohjelman kääntämiseen käytettävä kohde prog riippuu kahdesta objektitiedostosta, joiden kääntämiseen kerrotaan ohjeet omina kohteinaan. Objektitiedostot linkitetään toisiinsa riippuvien kohteiden kääntämisen jälkeen.
Käännös esimerkkitapauksessa voidaan tehdä komentorivillä make prog
, jonka jälkeen make-ohjelma kutsuu kerrottuja ohjelmia ehtojen mukaan.
Tyypillisesti useiden lähdekooditiedostojen kanssa objektitiedostot ja lähdekooditiedostot kerrotaan listana, jolloin jokaiselle ei tarvitse toistaa ehtomäärittelyä erikseen.
Lähteet
[muokkaa | muokkaa wikitekstiä]- https://www.linux.fi/wiki/Makefile
- http://www.cs.colby.edu/maxwell/courses/tutorials/maketutor/
- GNU Make manuaali (englanniksi)