Razlika između inačica stranice Make

Izvor: HrOpenWiki
Skoči na: orijentacija, traži
m
m
Redak 11: Redak 11:
 
briše/čisti sve prevedene i obrađene datoteke i ostavlja samo izvorne datoteke. Dakako, moguća su i odstupanja od ovih pravila, što korisnik lako može provjeriti pregledavanjem make datoteke.
 
briše/čisti sve prevedene i obrađene datoteke i ostavlja samo izvorne datoteke. Dakako, moguća su i odstupanja od ovih pravila, što korisnik lako može provjeriti pregledavanjem make datoteke.
  
Make u direktoriju u kojem je pokrenut traži make datoteku i to pod više naziva, sljedećim redoslijedom: GNUMakefile, Makefile, makefile. Kad nađe datoteku obično skače na prvo procedura/meta koje se pojavi u datoteci koje je tradicionalno nazvano ''all''. Moguće je naravno pozivanje i više procedura istovremeno, npr.
+
Make u direktoriju u kojem je pokrenut traži make datoteku i to pod više naziva, sljedećim redoslijedom: GNUMakefile, Makefile, makefile. Kad nađe datoteku obično skače na prvu proceduru/metu koja se pojavi u datoteci i tradicionalno naziva ''all''. Moguće je naravno pozivanje i više procedura istovremeno, npr.
 
  make provjeri instaliraj ocisti
 
  make provjeri instaliraj ocisti
 +
ako su iste naravno definirane u make datoteci.
  
 
==Pisanje make datoteke==
 
==Pisanje make datoteke==

Inačica od 07:13, 2. lipnja 2010.

Make je alat za automatizirano prevođenje datoteka izvornog koda u izvršne datoteke i/ili biblioteke. Uputstva kako make mora djelovati nalaze se u make datoteci (Makefile) koja obično dolazi sa samim izvornim kodom nekog softvera.

U make je datoteci moguće definirati više procedura/meta koje se pozivaju odvojeno ili povezano, tako npr. je česta praksa da naredba

make

(bez argumenata) prevodi izvorne datoteke u binarne/izvršne;

make install

premješta/kopira binarne datoteke po hijerarhiji sustava (za što su obično potrebne administratorske ovlasti);

make uninstall

briše instalirane datoteke iz hijerarhije sustava;

make clean

briše/čisti sve prevedene i obrađene datoteke i ostavlja samo izvorne datoteke. Dakako, moguća su i odstupanja od ovih pravila, što korisnik lako može provjeriti pregledavanjem make datoteke.

Make u direktoriju u kojem je pokrenut traži make datoteku i to pod više naziva, sljedećim redoslijedom: GNUMakefile, Makefile, makefile. Kad nađe datoteku obično skače na prvu proceduru/metu koja se pojavi u datoteci i tradicionalno naziva all. Moguće je naravno pozivanje i više procedura istovremeno, npr.

make provjeri instaliraj ocisti

ako su iste naravno definirane u make datoteci.

Pisanje make datoteke

Treba razumjeti da je jezik, odnosno sintaksa u kojoj je pisana make datoteka slična onima u deklarativnom programiranju gdje nema klasičnog "toka" u programu. To znači da je slijed i raspored u make datoteci nebitan (make sam određuje koju liniju treba kada izvršiti). Još jedan neuobičajen detalj je da sintaksa make datoteke razlikuje razmake, one od tabulatora i razmaknice. Tabulator se koristi onda kad se žele dodati naredbe pod određenu proceduru.

Struktura tada izgleda ovako:

MARKO1=naredba ili pokrata

procedura/meta: komponenta

Primjer

    CC     = gcc
    CFLAGS = -g -O2
    RM     = rm
 
    all: helloworld
 
    helloworld: helloworld.o
	    # Naredbe pocinju s tabulatorom (TAB)
	    $(CC) $(CFLAGS) -o $@ $<
 
    helloworld.o: helloworld.c
	    $(CC) $(CFLAGS) -c -o $@ $<
 
    clean:
	    ${RM} -f helloworld helloworld.o

Na početku, radi preglednosti, definiramo makro naredbe i pokrate kako ih ne bi morali ponavljati unutar samih procedura. U ovom primjeru to su redom:

  • CC = gcc - specificira koji će se prevoditelj koristiti (gcc); može biti i drugi, npr. g++;
  • CFLAGS = -g -O2 - argumenti koji će biti proslijeđeni prevoditelju;
  • RM = rm - naredba za brisanje (dobro ju je definirati ovako izdvojenu jer se razlikuje od sustava do sustava).

Make tada ide do prve procedure all koja mu govori da mora imati (ažuriranu) datoteku helloworld, a kako je nema dalje traži proceduru/metu koja nosi to ime i dolazi do sljedeće procedure helloworld. U njoj se pak zahtjeva postojanje datoteke/objekta helloworld.o, a kako ga nema traži se ta procedura (odmah sljedeća). U proceduri helloworld.o se traži datoteka helloworld.c koja postoji u istom direktoriju (izvorna datoteka) te se izvodi sljedeća naredba u bloku:

$(CC) $(CFLAGS) -c -o $@ $<

gdje se makroi $(CC) i $(CFLAGS) mijenjaju s gcc, odnosno -g -O2, a $@ označava ime procedure, tj. mete, u ovom slučaju helloworld.o, a $< ime komponente te procedure, odnosno helloworld.c. Konkretno, nakon interpretacije, taj redak izgleda:

gcc -g -O2 -c -o helloworld.o helloworld.c

Make se tada vraća na prošlu proceduru helloworld iz koje je došao na ovu posljednju i izvršava daljnji blok naredbi koji stvara izvršnu datoteku helloworld i time je make završio jer nema dodatnih procedura koje bi se pozvale iz početne procedure all.

Ako korisnik pokrene naredbu

make clean

Poziva se procedura clean u kojoj se brišu izvršna i objektne datoteke.

Izvori i reference