Makefile służy do zarządzania kompilacją, określa zależności plików i rekompiluje tylko te elementy, które zmieniły się od ostatniego buildu.
Podstawowa składnia reguły: target: prerequisites, a pod spodem komendy zaczynające się tabulatorem.
Make wykorzystuje znaczniki czasu plików do decydowania, czy dany target wymaga przebudowy (jeśli plik-prerequisite jest nowszy niż target).
Pierwsza reguła w pliku jest domyślnym targetem (często nazywanym „all”), wywoływana przy samym poleceniu make.
Zmienne w Makefile mogą być rekurencyjne (używając „=”) lub prosto rozszerzane („:=”); automatyczne zmienne ($@, $<, $^, $?) ułatwiają dostęp do nazw targetów i zależności.
Pattern rules (z %) i static pattern rules pozwalają na tworzenie szablonów kompilacji dla wielu plików jednocześnie.
Wildcards: „$(wildcard *.c)” służy do wyszukiwania plików, a „%” w regułach dopasowuje stem do generowania zależności.
Implicit rules Make automatycznie kompilują .c -> .o i linkują obiekty w programy, korzystając z predefiniowanych zmiennych (CC, CFLAGS, LDFLAGS itp.).
Cele takie jak clean są domyślnie uznawane za pliki – należy je oznaczyć .PHONY, żeby Make zawsze je wykonywał.
Zaawansowane funkcje tekstowe: foreach, subst, patsubst, filter, filter-out, call tworzą własne makra i przetwarzają listy.
Możliwość includowania innych Makefile (include), ustawiania ścieżek wyszukiwania (vpath), eksportowania zmiennych do środowiska oraz używania .DELETE_ON_ERROR.
Praktyczny przykład (Makefile Cookbook) pokazuje generowanie listy źródeł przez find, automatyczne tworzenie katalogów build, generowanie plików zależności .d i kompilację całości.
Get notified when new stories are published for "🇵🇱 Hacker News Polski"