make - narzędzie GNU Make do obsługi grup
programów
make [OPCJA]... [OBIEKT]...
Celem istnienia narzędzia make jest automatyczne
określanie, które elementy dużego programu
należy rekompilować oraz wydawanie fizycznych komend
rekompilacji. Podręcznik ten opisuje implementację GNU
make, napisaną przez Richarda Stallmana i Rolanda McGratha, a
obecnie utrzymywaną przez Paula Smitha. Nasze przykłady to
programy w C, gdyż są one bardzo popularne. Make
może być jednak używany z dowolnym językiem
programowania, którego kompilator można uruchomić z
linii poleceń. W rzeczywistości, make nie jest
ograniczone do programów. Np. można go używać do
opisywania dowolnego zadania, w którym część
plików musi być odświeżana automatycznie na
podstawie innych za każdym razem gdy one się
zmienią.
Aby przygotować się do używania make,
należy utworzyć plik zwany makefile, który
opisuje związki zależności między plikami danego
programu oraz udostępnia komendy, wykonywane do
odświeżania plików. W programie, zwykle plik
wykonywalny jest aktualizowany z plików obiektów, które
z kolei są tworzone przez kompilację plików
źródłowych.
Gdy istnieje już potrzebny makefile, za każdą
zmianą plików źródłowych wystarczy proste
polecenie powłoki:
make
zajmie się ono wszelkimi niezbędnymi rekompilacjami.
Program make używa opisu z Makefile oraz czasów
modyfikacji plików i w ten sposób decyduje, który z
nich odświeżyć. Dla każdego z
wymagających odświeżenia plików wykonywane
są komendy, zapisane w pliku makefile.
make wykonuje komendy w makefile w celu
odświeżenia jednego lub więcej celów,
gdzie cel jest zwykle programem. Jeśli nie poda się
opcji -f, make poszuka plików makefile w
następującej kolejności: GNUmakefile,
makefile i Makefile.
Zwykle, powinno się nazywać swoje makefile jako
makefile lub Makefile (przy czym zalecamy Makefile,
ponieważ pojawi się on wówczas na początku
wypisywanej zawartości katalogu, obok innych ważnych
plików takich jak README). W większości makefile
nie zaleca się nazwy sprawdzanej jako pierwsza —
GNUmakefile. Należy jej używać tylko w przypadku
makefile, który jest typowy dla GNU Make i nie zostałby
zrozumiany przez inne wersje make. Jeśli makefile
wyniesie „-”, odczytywane jest standardowe wejście.
make aktualizuje cel, jeśli zależy on od
plików wstępnych, które zostały zmodyfikowane od
czasu ostatniej modyfikacji celu oraz gdy cel nie istnieje.
- -b, -m
- Opcje te są ignorowane i istnieją dla zgodności z
innymi wersjami make.
- -B,
--always-make
- Bezwarunkowo tworzy wszystkie obiekty.
- -C katalog,
--directory=katalog
- Zmienia przed odczytywaniem plików makefile katalog
bieżący na katalog. Jeśli podanych jest wiele
opcji -C to każda jest interpretowana względem
poprzedniej: -C / -C etc jest równoważne -C
/etc. Jest to zazwyczaj używane w rekurencyjnych
wywołaniach make.
- -d
- Wypisuje informacje diagnostyczne. Informacje te mówią,
które pliki wybrano do odświeżania, które
czasy modyfikacji były porównywane i z jakimi rezultatami,
które pliki wymagają odświeżenia, które
niejawne reguły są stosowane — wszystko co
można wymyślić ciekawego o sposobie działania
make.
- --debug[=FLAGI]
- Wyświetla informacje diagnostyczne oprócz zwykłych
komunikatów przetwarzania. Jeśli pominie się
FLAGI, to zachowanie jest takie samo, jak gdyby podano -d.
FLAGI mogą być dowolną kombinacją
następujących nazw (w tym wszystkich), rozdzielonych
przecinkiem lub spacją. Liczy się jedynie pierwszy znak,
resztę można pominąć: all aby
wyświetlać wszystkie informacje (odpowiednik -d),
basic — podstawowe, verbose — podstawowe, lecz
bardziej szczegółowe, implicit — pokazuje
operacje wyszukiwania wynikające z reguł pośrednich,
jobs — szczegóły wywoływania
poleceń, makefile — diagnostyka przy ponownym
tworzeniu makefile, print — pokazuje wszelkie uruchamiane
przepisy, nawet gdy są ciche oraz why — pokazuje
powody, dlaczego make zdecydował się
przebudować każdy cel. Aby wyłączyć
wszystkie poprzednie opcje diagnostyki należy podać
none.
- -e,
--environment-overrides
- Daje zmiennym środowiskowym pierwszeństwo nad zmiennymi
plików makefile.
- -E
łańcuch, --eval
łańcuch
- Interpretuje łańcuch przy pomocy funkcji eval,
przed przetworzeniem plików makefile.
- -f plik,
--file=plik, --makefile=PLIK
- Jako makefile używa pliku.
- -i,
--ignore-errors
- Ignoruje wszelkie błędy komend wykonywanych przy
odświeżaniu plików.
- -I katalog,
--include-dir=katalog
- Podaje katalog, w którym szukać
załączanych (included) plików makefile. Jeśli
podanych jest kilka opcji -I, to są on przeszukiwane w
podanej kolejności. W przeciwieństwie do innych flag
make, katalogi podane flagami -I mogą
następować bezpośrednio po fladze:
-Idir jest równoważne -I dir.
Składnia ta jest udostępniona dla kompatybilności z
flagą -I preprocesora języka C.
- -j [zadania],
--jobs[=zadania]
- Podaje dozwoloną liczbę zadań (komend),
którą można wykonywać naraz. Jeśli jest
więcej niż jedna opcja -j, ostatnia jest
znacząca. Jeśli opcja -j jest podana bez argumentu,
make nie będzie ograniczać liczby możliwych
zadań.
- --jobserver-style=styl
- Styl jobserver, który ma być używany. Styl
może wynosić fifo, pipe lub sem (tylko
Windows).
- -k,
--keep-going
- Kontynuuje ile się da, po błędzie. Chociaż
cel, który się nie powiódł i
zależności na nim się opierające nie
mogą być zbudowane, to można przetworzyć inne
zależności celów.
- -l
[obciążenie],
--load-average[=obciążenie]
- Określa, że nie należy uruchamiać nowych
zadań (komend) jeśli pracują już inne, a
obciążenie wynosi co najmniej
obciążenie (liczba zmiennoprzecinkowa). Bez
argumentów, usuwany jest poprzedni limit.
- -L,
--check-symlink-times
- Używa ostatniego mtime między dowiązaniem a
celem.
- -n, --just-print,
--dry-run, --recon
- Wypisuje komendy, które byłyby wykonywane, lecz nie wykonuje
ich (z wyjątkiem pewnych okoliczności).
- -o plik,
--old-file=plik, --assume-old=plik
- Nie odświeża pliku plik nawet jeśli jest
starszy niż jego zależności i nie
odświeża niczego na konto zmian pliku.
Ogólnie, plik jest traktowany jako bardzo stary, a jego
reguły są ignorowane.
- -O[typ],
--output-sync[=typ]
- Przy uruchamianiu wielu zadań równoległe za
pomocą -j, upewnia się, że wynik wszystkich
zadań jest łączony, zamiast przepleciony
pomiędzy sobą. Jeśli nie poda się typu
lub gdy wynosi on target, grupowany jest wynik całego
przepisu dla wszystkich celów. Jeśli typ wynosi
line, grupowany jest wynik każdego wiersza polecenia z
przepisu. Jeśli typem jest recurse, grupowany jest
wynik każdego rekurencyjnego make. Jeśli typ wynosi
none, synchronizacja wyjścia jest
wyłączona.
- -p,
--print-data-base
- Wypisuje bazę danych (reguły i wartości zmiennych),
które wynikają z odczytanych plików Makefile.
Następnie wykonuje się w trybie normalnym, chyba że
podano inaczej. Wypisuje to też informacje o wersji, podawane przez
przełącznik -v (patrz niżej). Aby
wypisać bazę danych bez odświeżania
plików, proszę użyć make -p
-f/dev/null.
- -q,
--question
- „Tryb pytania”. Nie uruchamia żadnych komend i
niczego nie wypisuje; zwraca tylko status zakończenia, który
może być zerowy jeśli cele są
świeże, lub niezerowy w innym przypadku.
- -r,
--no-builtin-rules
- Eliminuje używanie wbudowanych reguł niejawnych.
Czyści też domyślną listę reguł
przyrostkowych.
- -R,
--no-builtin-variables
- Wyłącza definiowanie wbudowanych zmiennych.
- -s, --silent,
--quiet
- Ciche działanie; nie wypisuje wykonywanych komend.
- --no-silent
- Wyłącza -s.
- -S, --no-keep-going,
--stop
- Wyłącza -k.
- -t, --touch
- Dotyka plików (zaznacza je jako odświeżone, bez
zmieniania zawartości), zamiast normalnego uruchamiania komend.
Jest to używane do udawania, że komendy zostały
wykonane w celu ogłupienia przyszłych wywołań
make.
- --trace
- Wypisywana jest informacja o dyspozycji każdego celu (dlaczego cel
jest przebudowywany i jakie polecenia są uruchamiane w celu
przebudowania go).
- -v, --version
- Wyświetla wersję make, informację o prawach
autorskich, listę autorów oraz zastrzeżenie o braku
gwarancji.
- -w,
--print-directory
- Wypisuje komunikat, zawierający katalog bieżący przed
i po działaniu. Może to być przydatne do
śledzenia błędów w skomplikowanych
zagnieżdżeniach rekursywnego make.
- --no-print-directory
- Wyłącza -w, nawet jeśli było ono
włączone domyślnie.
- --shuffle[=TRYB]
- Włącza tasowanie kolejności celów i
zależności wstępnych. TRYB jest jednym z:
none, aby wyłączyć tasowanie, random
aby tasować zależności wstępne w losowej
kolejności, reverse, aby rozważać
zależności wstępne w odwrotnej kolejności lub
liczba <ziarno>, która włącza tryb
random z podaną wartością ziarna.
Jeśli pominie się TRYB, domyślną
wartością jest random.
- -W plik,
--what-if=plik, --new-file=plik,
--assume-new=plik
- Udaje, że cel plik został właśnie
zmodyfikowany. Po użyciu z flagą -n, pokazuje to, co
stałoby się, gdyby rzeczywiście zmodyfikowano ten
plik. Bez opcji -n, jest to prawie równoważne
uruchomieniu na podanym pliku komendy touch. Jedyną
różnicą jest fakt, że czas modyfikacji jest tu
zmieniany tylko w wyobraźni make.
- --warn-undefined-variables
- Ostrzega przy odwołaniach do niezdefiniowanych zmiennych.
GNU Make kończy działanie z zerem, jeśli
wszystkie pliki makefile zostały pomyślnie przeanalizowane i
nie wystąpiły cele, których nie udało się
zbudować. Status o wartości jeden zostanie zwrócony
jeśli podano -q, a make stwierdził, że
cel wymaga przebudowania. Status o wartości dwa oznacza
wystąpienie błędów.
Pełna dokumentacja dla programu make jest
utrzymywana jako podręcznik Texinfo. Jeśli programy
info oraz make są właściwie
zainstalowane, polecenie
- info make
powinno dać dostęp do pełnego
podręcznika.
Zob. rozdział „Problems and Bugs” w The
GNU Make Manual.
Podręcznik ten został stworzony przez Dennisa
Morse'a z Uniwersytetu Stanforda. Dalsze aktualizacje wprowadził Mike
Frysinger. Podręcznik został przepisany przez Rolanda
McGratha. Utrzymuje go Paul Smith.
Copyright © 1992-1993, 1996-2023 Free Software Foundation,
Inc. Ten plik jest częścią GNU make.
GNU Make jest wolnym oprogramowaniem; można go
dystrybuować i/lub modyfikować zgodnie z warunkami licencji
GNU General Public License opublikowanej przez Free Software Foundation; w
wersji 3 Licencji lub (wedle uznania) późniejszej.
GNU Make rozpowszechniany jest z nadzieją, iż
będzie użyteczny - jednak BEZ JAKIEJKOLWIEK GWARANCJI, nawet
domyślnej gwarancji PRZYDATNOŚCI HANDLOWEJ albo
PRZYDATNOŚCI DO OKREŚLONYCH ZASTOSOWAŃ. W celu
uzyskania bliższych informacji sięgnij do Powszechnej Licencji
Publicznej GNU.
Wraz z make powinieneś otrzymać egzemplarz
Powszechnej Licencji Publicznej GNU (GNU General Public License) - zob.
https://www.gnu.org/licenses/.
Tłumaczenie niniejszej strony podręcznika: Przemek
Borys <pborys@dione.ids.pl> i Michał Kułach
<michal.kulach@gmail.com>
Niniejsze tłumaczenie jest wolną
dokumentacją. Bliższe informacje o warunkach licencji
można uzyskać zapoznając się z
GNU General
Public License w wersji 3 lub nowszej. Nie przyjmuje się
ŻADNEJ ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika
prosimy zgłaszać na adres listy dyskusyjnej
manpages-pl-list@lists.sourceforge.net.