Ero sivun ”Makefile” versioiden välillä
Siirry navigaatioon
Siirry hakuun
→Esimerkki: pitäis olla näin |
päivitys |
||
| Rivi 1: | Rivi 1: | ||
Makefile on tiedosto, jonka perusteella [[make]] [[kääntäminen|kääntää]] ohjelman [[lähdekoodi]]n. Makefilet ovat käteviä etenkin ohjelmoijille, jotka voivat niiden avulla automatisoida ohjelman käännösprosessin. | Makefile on tiedosto, jonka perusteella [[make]] [[kääntäminen|kääntää]] ohjelman [[lähdekoodi]]n. Makefilet ovat käteviä etenkin ohjelmoijille, jotka voivat niiden avulla automatisoida ohjelman käännösprosessin ja hallita tiedostojen riippuvuuksia. | ||
== Tiedoston rakenne == | == Tiedoston rakenne == | ||
Makefilen | Makefilen perusrakenne on tarkasti määrätty ja koostuu kohteesta (target), sen riippuvuuksista (prerequisites) ja komennoista (recipes). | ||
Makefile | |||
kohdetiedosto: lähdetiedosto1 lähdetiedosto2 lähdetiedosto3 | |||
<tabulaattori>kääntämiskomennot | |||
{{Huomautus|Huomioitavaa: Komentorivi on pakko aloittaa tabulaattorimerkillä (ei välilyönneillä).}} | |||
Esimerkki: hello.c-nimiselle C-kieliselle ohjelmalle voitaisiin luoda seuraavanlainen Makefile: | |||
<syntaxhighlight lang="makefile"> | |||
hello: hello.c | hello: hello.c | ||
gcc hello.c -o hello | gcc hello.c -o hello | ||
</syntaxhighlight> | |||
Jonka jälkeen samassa hakemistossa ajettu komento make kääntäisi ohjelman. | Jonka jälkeen samassa hakemistossa ajettu komento make kääntäisi ohjelman. | ||
== Useampia kohteita == | == Useampia kohteita (Targets) == | ||
Samassa Makefilessä voi olla useampia käännöskohteita, joita voidaan kutsua | Samassa Makefilessä voi olla useampia käännöskohteita, joita voidaan kutsua erikseen tai hyödyntää toisesta kohteesta käsin. | ||
Jos makelle ei kerrota erikseen, mikä kohde halutaan käsitellä, make käsittelee tiedoston ensimmäisen lohkon (joka on perinteisesti all). | |||
Esimerkki moduuleista: Jos edellä käyttämäämme hello-ohjelmaan lisätään toinen tiedosto world.c, voitaisiin Makefile tehdä seuraavanlaiseksi: | |||
<syntaxhighlight lang="makefile"> | |||
# Linkityskohde | |||
hello: hello.o world.o | |||
gcc hello.o world.o -o hello | |||
make world.o | |||
Tätä ominaisuutta hyödynnetään usein Makefileissä olevilla clean- ja install-kohteilla. | # Pelkkä käännös (Moduulit) | ||
hello.o: hello.c | |||
gcc -c hello.c -o hello.o | |||
world.o: world.c | |||
gcc -c world.c -o world.o | |||
</syntaxhighlight> | |||
Nyt koko ohjelman kääntäminen sujuisi komennolla make. Pelkän world.o-tiedoston kääntäminen onnistuisi komennolla: | |||
make world.o. | |||
== Erityiskohteet == | |||
Tätä ominaisuutta hyödynnetään usein Makefileissä olevilla ''clean''- ja ''install''-kohteilla, joita kutsutaan pseudokohteiksi (phony targets), sillä ne eivät luo oikeita tiedostoja. | |||
Makefile | |||
<syntaxhighlight lang="makefile"> | |||
.PHONY: clean install | |||
clean: | |||
rm -f *.o hello | |||
</syntaxhighlight> | |||
Yllä oleva clean-kohde poistaisi käännetyt objektitiedostot (''hello.o'' ja ''world.o'') ja käännetyn ohjelman (hello). Sitä kutsuttaisiin komentoriviltä komennolla: | |||
make clean | make clean | ||