make

narzędzie do automatyzacji kompilowania programów

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.

OpisEdytuj

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.


HistoriaEdytuj

Program został pierwotnie stworzony przez dr. Stuarta I. Feldmana w 1977 roku, który pracował w owym czasie w Bell Labs[potrzebny przypis].

ImplementacjeEdytuj

Istnieje kilka implementacji make jak np.:

MakefileEdytuj

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 makefileEdytuj

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

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

Linki zewnętrzneEdytuj