make
make – program powłoki systemowej automatyzujący i przyspieszający proces kompilacji złożonych programów i bibliotek. Make nadaje się również do innych prac, które wymagają przetwarzania wielu plików zależnych od siebie.
Opis
[edytuj | edytuj kod]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.
Implementacje
[edytuj | edytuj kod]Istnieje kilka implementacji 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]Poniższa reguła opisuje 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ę plik makefile, który:
- kompiluje plik źródłowy "helloworld.c" do pliku obiektowego, a plik obiektowy do wykonywalnego (kompilacja 2 etapowa)
- używa 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]- configure
- CMake – wieloplatformowe narzędzie do automatycznego zarządzania procesem kompilacji programu (tworzy plik Makefile).