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

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

Istnieje kilka implementacji make jak np.:

Makefile

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

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ż

  • configure
  • CMake – wieloplatformowe narzędzie do automatycznego zarządzania procesem kompilacji programu (tworzy plik Makefile).

Linki zewnętrzne