Ero sivun ”Makefile” versioiden välillä
Siirry navigaatioon
Siirry hakuun
päivitys |
päivitys |
||
| (Yhtä välissä olevaa versiota samalta käyttäjältä ei näytetä) | |||
| Rivi 56: | Rivi 56: | ||
== Muuttujat == | == Muuttujat == | ||
Make tukee erilaisten muuttujien käyttöä Makefileissä, jolloin saadaan | Make tukee erilaisten muuttujien käyttöä Makefileissä, jolloin tiedostosta saadaan helpommin ylläpidettävä ja siirrettävä. | ||
Muuttujat määritellään syntaksilla: | |||
muuttuja = arvo | muuttuja = arvo | ||
Muuttujiin viitataan koodissa syntaksilla $(muuttuja). | |||
Esimerkki muuttujien käytöstä: | |||
<syntaxhighlight lang="Makefile"> | |||
CC = gcc | |||
CFLAGS = -g | |||
hello.o: hello.c | |||
$(CC) $(CFLAGS) -c hello.c -o hello.o | |||
</syntaxhighlight> | |||
Nyt kääntäjän vaihtaminen (muuttamalla CC=...) tai kääntöoptioiden lisääminen (muuttamalla CFLAGS=...) onnistuu helposti yhdestä paikasta. | |||
== Oletussäännöt == | |||
Make-työkalussa on sisäänrakennettuja oletussääntöjä yleisimpiin käännöstehtäviin, kuten C-koodin kääntämiseen. | |||
Kun esimerkiksi ''hello.o''-tiedosto riippuu ''hello.c''-tiedostosta, Make tietää automaattisesti, että se tarvitsee C-kääntäjän. Jos käytetään yllä määriteltyjä muuttujia, Make käyttää oletussääntöä, joka on käytännössä: | |||
<syntaxhighlight lang="Makefile"> | |||
%.o: %.c | |||
$(CC) $(CFLAGS) -c $< -o $@ | |||
</syntaxhighlight> | |||
Nyt projektin hakemistossa voidaan ajaa komento make, jolloin | (missä $< on riippuvuustiedosto ja $@ on kohdetiedosto) | ||
Tämän ansiosta monissa pienissä Makefilen kohdemäärityksissä tarvitsee määrittää vain riippuvuudet, eikä itse komentoja. | |||
=== Esimerkki === | |||
Huomaa, että jos nyt muokkaamme tiedostoa src/main.cpp ja ajamme maken uudelleen, tiedostoa src/funktiot.cpp ei käännetä uudestaan: | Esimerkki Makefilestä, jota käytetään kääntämään kahdesta [[C++]]-kielisestä lähdekooditiedostosta (''src/main.cpp'' ja ''src/funktiot.cpp''). | ||
Makefile<br> | |||
<syntaxhighlight lang="Makefile"> | |||
# Objektitiedostot | |||
PROJEKTI = src/main.o src/funktiot.o | |||
# Käännösasetukset | |||
LDFLAGS = -lm | |||
CXXFLAGS = -g | |||
# Oletuksena suoritetaan osio "softa" | |||
all: softa | |||
# Objektitiedostot käännetään C++-oletussäännöillä, | |||
# mutta riippuvuus määritellään Makefilessa. | |||
src/main.o: src/main.cpp | |||
src/funktiot.o: src/funktiot.cpp | |||
# Linkityskohde | |||
softa: $(PROJEKTI) | |||
g++ $(PROJEKTI) $(CXXFLAGS) $(LDFLAGS) -o ohjelma | |||
# Clean, joka poistaa tarpeettomat objektitiedostot | |||
clean: | |||
rm -f $(PROJEKTI) ohjelma | |||
</syntaxhighlight> | |||
Nyt projektin hakemistossa voidaan ajaa komento make, jolloin make kääntää projektin: | |||
<syntaxhighlight lang="Bash"> | |||
$ make | |||
g++ -g -c -o src/main.o src/main.cpp | |||
g++ -g -c -o src/funktiot.o src/funktiot.cpp | |||
g++ src/main.o src/funktiot.o -g -lm -o ohjelma | |||
</syntaxhighlight> | |||
Huomaa, että jos nyt muokkaamme tiedostoa ''src/main.cpp'' ja ajamme maken uudelleen, tiedostoa ''src/funktiot.cpp'' ei käännetä uudestaan, koska sen riippuvuus on jo ajan tasalla. Tämä on riippuvuuksienhallinnan ydin: | |||
<syntaxhighlight lang="Bash"> | |||
$ touch src/main.cpp | |||
$ make | |||
g++ -g -c -o src/main.o src/main.cpp | |||
g++ src/main.o src/funktiot.o -g -lm -o ohjelma | |||
</syntaxhighlight> | |||
== Katso myös == | == Katso myös == | ||
*[[Make]] | * [[Make]] | ||
*[[ | * [[CMake]] | ||
*[[ | * [[Autotools]] | ||
* [[Jam]] | |||
* [[SCons]] | |||
*[ | |||
[[Luokka:Kehitystyökalut]] | [[Luokka:Kehitystyökalut]] | ||