MOJA PASJA - PROGRAMOWANIE
   Dzisiaj jest Sobota, 10 maja, 2008r. Ostatnia aktualzacja miała miejsce: 10 grudnia 2006r. Homepage

Programowanie: Artykuły * FAQ * Download * Komponenty * Książki WWW: Artykuły * Narzędzia * Kursy * Darmowe * FAQ * Skrypty * Ksiązki Off-Topic: Aforyzmy * Humor Inne: Forum * Wiki * Liczniki * Linki * Chat * Grafika * Video * Inne



Make - Tworzenie Makefile



Autor: mgr inż. Bartosz Baliś     

Wstęp

Narzędzie make służy do zarządzania kompilacją projektów składających się z wielu plików źródłowych.

Aby używać make należy napisać skrypt o nazwie Makefile lub makefile, w którym opisane są:
  • zależności pomiędzy plikami źródłowymi i plikami wynikowymi,
  • sposób tworzenia plików wynikowych z plików źródłowych.
Następnie przy pomocy polecenia make kompilujemy projekt.

Make usprawnia kompilację, gdyż samodzielnie decyduje, które z plików źródłowych mają być przekompilowane (sprawdzając daty ostatniej modyfikacji).

Budowa pliku Makefile

Plik Makefile składa się głównie z reguł. Reguła ma następującą budowę:

CEL: SKŁADNIKI
	KOMENDA


Gdzie CEL to nazwa pliku docelowego, który jest tworzony z plików wymienionych jako SKŁADNIKI, zaś KOMENDA podaje komendę, która tworzy plik docelowy CEL z plików składowych SKŁADNIKI

Przykład reguły:

hello: hello.c aux.c
	gcc hello.c aux.c -o hello


Reguła ta określa sposób tworzenia pliku wykonywalnego hello z plików hello.c i aux.c

UWAGA Przed komendą musi obowiązkowo wystąpić znak tabulacji.

Przetwarzanie pliku składającego się z wielu reguł.

Make dąży do tego, żeby utworzyć plik docelowy znajdujący się w pierwszej regule w pliku Makefile. szystkie pozostałe reguły w pliku Makefile są pomocnicze i zwykle podają sposób utworzenia składników z reguł poprzednich.

Przykład pliku Makefile składającego się z kilku reguł:

hello: hello.o aux.o
	gcc hello.o aux.o -o hello

hello.o: hello.c
	gcc -c hello.c -o hello.o

aux.o: aux.c
	gcc -c aux.c -o aux.o


W tym wypadku głównym plikiem docelowym jest plik hello. Jego składniki to pliki hello.o i aux.o. Make szuka tych plików w katalogu bieżącym, jeśli jednak ich nie znajdzie to szuka reguł, które podają sposób w jaki te pliki utworzyć. W powyższym przykładzie są to dwie kolejne reguły. Make korzysta z nich, żeby utworzyć składniki reguły głównej i dopiero wtedy może utworzyć główny plik docelowy hello

Zmienne w pliku Makefile

W pliku Makefile można definiować zmienne, tak jak w poniższym przykładzie:

OBJS=hello.o aux.o

hello: $(OBJS)
	gcc $(OBJS) -o hello

hello.o: hello.c
	gcc -c hello.c -o hello.o

aux.o: aux.c
	gcc -c aux.c -o aux.o


W tym przykładzie zdefiniowana została zmienna o nazwie OBJS i nadana jej została wartość 'hello.o aux.o'. Odwołanie do zdefiniowanej zmiennej odbywa się przy pomocy znaku dolara i nawiasów okrągłych. W tym przypadku raz zdefiniowana zmienna została użyta dwukrotnie. Jeśli będziemy chcieli dodać coś do listy składników pliku hello to dzięki użyciu zmiennej wystarczy to zrobić raz - w definicji zmiennej OBJS

Zmienne standardowe

W Makefile można używać wielu zmiennych zdefiniowanych standardowo. Najczęściej używane zmienne standardowe:
  • CC - nazwa kompilatora języka C
  • CXX - nazwa kompilatora języka C++
  • CFLAGS - opcje kompilatora języka C
  • CXXLAGS - opcje kompilatora języka C
  • LFLAGS - opcje dla linkera
Zmienne standardowe mają pewną predefiniowaną wartość (np. zmienna CC ma predefiniowaną wartość 'cc'), którą jednak można zmieniać. Oto przykład:

CC=gcc
CFLAGS=-g
LFLAGS=
OBJS=hello.o aux.o

hello: $(OBJS)
	$(CC) $(LFLAGS) $(OBJS) -o hello

hello.o: hello.c
	$(CC) $(CFLAGS) -c hello.c -o hello.o

aux.o: aux.c
	$(CC) $(CFLAGS) -c aux.c -o aux.o


Zmienne automatyczne

Zmienne automatyczne są to specjalne zmienne, które przechowują wartości zmieniające się dynamicznie w trakcie wykonywania Makefile'a, np. nazwa pliku docelowego aktualnie przetwarzanej reguły. Najczęściej używane zmienne automatyczne:
  • < - aktualnie przetwarzany plik z listy składników (patrz przykład)
  • @ - nazwa pliku docelowego
  • ^ - składniki
CC=gcc
CFLAGS=-g
OBJS=hello.o aux.o

hello: $(OBJS)
	$(CC) $(LFLAGS) $^ -o $@

hello.o: hello.c
	$(CC) $(CFLAGS) -c $< -o $@

aux.o: aux.c
	$(CC) $(CFLAGS) -c $< -o $@


Więcej o regułach

Reguły z wzorcem.

CC=gcc
CFLAGS=-g
OBJS=hello.o aux.o

hello: $(OBJS)
	$(CC) $(LFLAGS) $^ -o $@

$(OBJS): %.o: %.c
	$(CC) -c $(CFLAGS) $< -o $@


Reguły domyślne.

Make posiada pewne standardowe reguły do tworzenia pewnych typów plików. W poniższym przykładzie pominięto regułę tworzenia plików '.o' z plików '.c'. Make posiada jednak standardowe, domyślne reguły tworzenia plików .o. W tym przypadku make odnajdzie w katalogu bieżącym pliki '.c', z których utworzy pliki '.o' przy pomocy polecenia '$(CC) -c'.]

CC=gcc
CFLAGS=-g
OBJS=hello.o aux.o

hello: $(OBJS)
	$(CC) $(LFLAGS) $^ -o $@


Reguła clean

Każdy dobry plik makefile powinien posiadać regułę, która usuwa pliki pośrednie, tymczasowe, etc. powstałe podczas kompilacji. W powyższych przykładach plikami pośrednimi są pliki '.o'. Powszechnie przyjęło się, że taka reguła ma nazwę 'clean'. Oto przykład:

CC=gcc
CFLAGS=-g
OBJS=hello.o aux.o

hello: $(OBJS)
	$(CC) $(LFLAGS) $^ -o $@

clean:
	rm -f *.o


Zauważmy, że reguła clean ma pustą listę składników. Aby wywołać regułę clean używamy polecenia make clean

Więcej plików wynikowych

CC=gcc

all: prog1 prog2

prog1: prog1.c
	$(CC) $(CFLAGS) $(LFLAGS) prog1.c -o prog1
	
prog2: prog2.c
	$(CC) $(CFLAGS) $(LFLAGS) prog2.c -o prog2

clean:
	rm -f prog1.o prog2.o


Reguła .PHONY

Reguły 'clean' i 'all' są regułami specjalnymi w tym sensie, że 'clean' i 'all' nie są nazwami plików. Gdyby jednak zdarzyło się, że w katalogu bieżącym istnieje plik o nazwie 'all' lub 'clean' to reguły te mogłyby nie działać! Aby temu zapobiec trzeba by poinstruować make'a, że 'all' i 'clean' nie są nazwami plików. Do tego celu służy specjalna reguła o nazwie '.PHONY'.

CC=gcc

all: prog1 prog2

prog1: prog1.c
	$(CC) $(CFLAGS) $(LFLAGS) prog1.c -o prog1
	
prog2: prog2.c
	$(CC) $(CFLAGS) $(LFLAGS) prog2.c -o prog2

clean:
	rm -f prog1.o prog2.o

.PHONY: all clean


   Wasze opinie:
   Średnia ocena: 5.21/10 (84 głosów)
   
   Liczba komentarzy: 384 (pokaż wszystkie)Skomentuj !   


Autor: MMyTplusoYCPXWData dodania: 2008-05-09
When your little girl gets old enough to fall in love with fairy tales, a room set up in a princess style might be the perfect gift for your little queen, Cuppie Cake , :-[[, Absatzmarkterschliessung , 09783, Marika Hargitay , 1561, Accuent , otwdw, Jennifer Cardy Murder , bqte, Schmucksittich , 8-), Ya Ali Madad Mp3 , 891, Syprexa , 894448, Mobmeter , rhmwh, Cykelverkstan , pdhoq, Willton , yjew, Vouyer23 , =-O, Herrill Lanes , 275661, Fashionpoint , =-[[, Marienkrankenhaus Nordhorn , :-], Longferd Homes Las Vegas , 975106, Tncrystalrose , %-], Taildates , 1049,


Autor: KTlsXoTvYlldQTData dodania: 2008-05-09
These agreements may be made individually between business owners with complementary businesses or as part of exchanges facilitated by a third party, Anybattery , 536, Roxy50 , pgkgti, Norrlandskontakten , 06106, Timothy Lawliss , gzvt, Psichidi , 176, Abogida , 43006, Ps3game , 70585, Venuszeit , mrbsiz, Canon Multipf2330 , 8DDD, Superset 420 Mitel Desk Phone , zejnlr, The Solaria Riverdale , :], Hp C8000 Ode , 587425, Aalrinne , nkkp, Shockrooms , :P, Mermaids Tail Brookwell , cednh, Film Corden Tube Download , 936154, Herbalife Independent Distributor Murfreesboro , 574, Helibeds , 656344, Macsoods , >:-PPP,


Autor: IynVXPXbOGpDOitslCData dodania: 2008-05-08
over and over and over, Carbofer General Trading Sa , vsq, Merrickbank , >:))), Cinnebon , 8-((, Rbsinsurance Dividend , =D, Lbblbprent , >:-[[, Fuze Slenderize , =))), Tygh Valley Page Ranking , 09119, Lazenza , %-], Aliki Mikulich , =-[[[, Kelgoo , 2797, Abexco Registry Cleaner , plgfuv, Gorean Slavery , 28057, Hrx217vka , gjru, Dddcup , >:-], Lou Malnotti , dacjxl, High Speed Internet Access Provideraaaa , lrah,


Autor: AcHJfGhsData dodania: 2008-05-08
directoryguide, Cordelia Scaife May , 77358, Endre Martin Midtstigen , =[, Milkduds , 244, Roadbabes , qrew, Runescapepictures , 218624, Beileidsworte , fenia, Coraplast , vha, Kdk2364 , 985833, Lincolnshire Woulds , :-), Freestander Tents , 0179, Herrill Lanes , vxp, Zillio , 8-[, Gary Skerski , dhmlqu, Erdbeerbowle Mit Amaretto , 959, Beboproxy Unblocked , 8-(((,


Autor: GOVlVDJOdtPData dodania: 2008-05-08
You must make sure your website is sending the right message back to visitors, Joaquin Sabina Baar Mp3 Gratis , rgv, Tavole Eugubine , 477824, Demeniod , iui, Brendan Schaley , dmuqn, Tomeviewer , hgezbq, Ancast Tiscali , 9789, Ww Zabej , qbz, 1p52fmi , >:-]]], Entertanment Tonight , 280298, Greenvolts , 8-[[, Br1500lcd , 05240, Dattos , =-D, Pmwf New Watches , kcnebk, Windowbars , %-D, Creniker , txolcr, Michaelj1162 , 8(,


Autor: nLIsYyfoZuZaYGxJGWData dodania: 2008-05-08
com or ArticleCity, Silvania Silverstar , wcblq, Thevirginteens , qtkkxt, Oehlberg Construction Company , drv, Hochzeitspannen , 611063, Prowler Lynx 719 , >:[[[, Crosley Cr47 , :), Lyme Disase , >:-), Unseensurf , :[[[, J1587 Packet , 8]]], Brian O Driscoll Glenda Gilson , abq, Sissystation , 90037,


Autor: SJzbwHDIpsPPBoSxData dodania: 2008-05-08
This type of princess furniture will set the theme of your room, and you can add accessories that fit right in, Competition In Cerithidea Californica , %-(((, Debbie Maccomber , glakr, Ahphaiti , 99038, Jungfrau55 , vxq, Boomtruck , 02754, Bootyoveratlanta , 8185, Mg Hawangzhi , =-((, Fishercat , mnoq, Laurelburch , lrv, Camss Com Live Sex Cams , 9500,



Stronę przygotował: Kacper Cieśla (comboy). Wszelkie prawa zastrzeżone.
Reklama * Zgłoś błąd * Kontakt * Hosting * O stronie * Sponsoring
Czas generowania strony: 0.691s