make

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacja, szukaj

make – program powłoki systemowej automatyzujący proces kompilacji programów, na które składa się wiele zależnych od siebie plików.

Program przetwarza plik reguł Makefile i na tej podstawie stwierdza, które pliki źródłowe wymagają kompilacji. Zaoszczędza to wiele czasu przy tworzeniu programu, ponieważ w wyniku zmiany pliku źródłowego kompilowane są tylko te pliki, które są zależne od tego pliku. Dzięki temu nie ma potrzeby kompilacji całego projektu.

Make nadaje się również do innych prac, które wymagają przetwarzania wielu plików zależnych od siebie.

Program został pierwotnie stworzony przez dr. Stuarta I. Feldmana w 1977 roku, który pracował w owym czasie w Bell Labs[potrzebne źródło].

Istnieje kilka wersji make jak np.:

Makefile[edytuj | edytuj kod]

Makefile to plik reguł dla programu make. Zawiera opis zależności pomiędzy plikami źródłowymi programu. Umożliwia to przetwarzanie tylko tych plików, które się zmieniły od ostatniej kompilacji i plików od nich zależnych. Skraca to znacznie czas generowania pliku wynikowego.

Format pliku różni się w zależności od implementacji programu make, ale podstawowe reguły są takie same dla wszystkich odmian make.

W złożonych projektach informatycznych istnieje zazwyczaj kilka plików reguł, odpowiedzialnych za tworzenie poszczególnych modułów. Plik reguł jest często nazywany Makefile – program make wywołany bez parametrów rozpoczyna przetwarzanie pliku o takiej właśnie nazwie.

Przykładowy makefile[edytuj | edytuj kod]

Najprostszy przykład opisujący zależności między plikami:

helloworld.o: helloworld.c
	cc -c helloworld.c -o helloworld.o

W pierwszej linii znajduje się informacja, że plik helloworld.o zależy od pliku helloworld.c - czyli jeśli helloworld.c jest nowszy, to program make powinien wykonać polecenie znajdujące się w linii poniżej zależności.

Linia opisująca polecenie musi zaczynać się od znaku tabulacji (inna składnia jest częstym błędem).

Make dla uproszczenia zapisu pozwala na użycie symbolicznych nazw dla plików, przykładowo, $@ nazwa pliku wynikowego, $< nazwa pierwszego pliku od którego zależy wynik, $? lista wszystkich plików które są nowsze niż wynik.

Powyższy przykład można przepisać:

helloworld.o: helloworld.c
	cc -c $< -o $@

Poniżej znajduje się badzo prosty makefile, który kompiluje plik źródłowy "helloworld.c", używając kompilatora C – cc. Tag PHONY oznacza, że stojąca za nim nazwa nie jest nazwą pliku.

helloworld: helloworld.o
	cc -o $@ $<
 
helloworld.o: helloworld.c
	cc -c -o $@ $<
 
.PHONY: clean
 
clean:
	rm -f helloworld helloworld.o
 

Zobacz też[edytuj | edytuj kod]

Linki zewnętrzne[edytuj | edytuj kod]

Wikibooks-logo.svg
Zobacz podręcznik na Wikibooks: CWięcej o kompilowaniu