MAKE(1) Polecenia uzytkownika MAKE(1) NAZWA make - narzedzie GNU Make do obslugi grup programow SKLADNIA make [OPCJA]... [OBIEKT]... OPIS Celem istnienia narzedzia make jest automatyczne okreslanie, ktore elementy duzego programu nalezy rekompilowac oraz wydawanie fizycznych komend rekompilacji. Podrecznik ten opisuje implementacje GNU make, napisana przez Richarda Stallmana i Rolanda McGratha, a obecnie utrzymywana przez Paula Smitha. Nasze przyklady to programy w C, gdyz sa one bardzo popularne. Make moze byc jednak uzywany z dowolnym jezykiem programowania, ktorego kompilator mozna uruchomic z linii polecen. W rzeczywistosci, make nie jest ograniczone do programow. Np. mozna go uzywac do opisywania dowolnego zadania, w ktorym czesc plikow musi byc odswiezana automatycznie na podstawie innych za kazdym razem gdy one sie zmienia. Aby przygotowac sie do uzywania make, nalezy utworzyc plik zwany makefile, ktory opisuje zwiazki zaleznosci miedzy plikami danego programu oraz udostepnia komendy, wykonywane do odswiezania plikow. W programie, zwykle plik wykonywalny jest aktualizowany z plikow obiektow, ktore z kolei sa tworzone przez kompilacje plikow zrodlowych. Gdy istnieje juz potrzebny makefile, za kazda zmiana plikow zrodlowych wystarczy proste polecenie powloki: make zajmie sie ono wszelkimi niezbednymi rekompilacjami. Program make uzywa opisu z Makefile oraz czasow modyfikacji plikow i w ten sposob decyduje, ktory z nich odswiezyc. Dla kazdego z wymagajacych odswiezenia plikow wykonywane sa komendy, zapisane w pliku makefile. make wykonuje komendy w makefile w celu odswiezenia jednego lub wiecej celow, gdzie cel jest zwykle programem. Jesli nie poda sie opcji -f, make poszuka plikow makefile w nastepujacej kolejnosci: GNUmakefile, makefile i Makefile. Zwykle, powinno sie nazywac swoje makefile jako makefile lub Makefile (przy czym zalecamy Makefile, poniewaz pojawi sie on wowczas na poczatku wypisywanej zawartosci katalogu, obok innych waznych plikow takich jak README). W wiekszosci makefile nie zaleca sie nazwy sprawdzanej jako pierwsza -- GNUmakefile. Nalezy jej uzywac tylko w przypadku makefile, ktory jest typowy dla GNU Make i nie zostalby zrozumiany przez inne wersje make. Jesli makefile wyniesie ,,-", odczytywane jest standardowe wejscie. make aktualizuje cel, jesli zalezy on od plikow wstepnych, ktore zostaly zmodyfikowane od czasu ostatniej modyfikacji celu oraz gdy cel nie istnieje. OPCJE -b, -m Opcje te sa ignorowane i istnieja dla zgodnosci z innymi wersjami make. -B, --always-make Bezwarunkowo tworzy wszystkie obiekty. -C katalog, --directory=katalog Zmienia przed odczytywaniem plikow makefile katalog biezacy na katalog. Jesli podanych jest wiele opcji -C to kazda jest interpretowana wzgledem poprzedniej: -C / -C etc jest rownowazne -C /etc. Jest to zazwyczaj uzywane w rekurencyjnych wywolaniach make. -d Wypisuje informacje diagnostyczne. Informacje te mowia, ktore pliki wybrano do odswiezania, ktore czasy modyfikacji byly porownywane i z jakimi rezultatami, ktore pliki wymagaja odswiezenia, ktore niejawne reguly sa stosowane -- wszystko co mozna wymyslic ciekawego o sposobie dzialania make. --debug[=FLAGI] Wyswietla informacje diagnostyczne oprocz zwyklych komunikatow przetwarzania. Jesli pominie sie FLAGI, to zachowanie jest takie samo, jak gdyby podano -d. FLAGI moga byc dowolna kombinacja nastepujacych nazw (w tym wszystkich), rozdzielonych przecinkiem lub spacja. Liczy sie jedynie pierwszy znak, reszte mozna pominac: all aby wyswietlac wszystkie informacje (odpowiednik -d), basic -- podstawowe, verbose -- podstawowe, lecz bardziej szczegolowe, implicit -- pokazuje operacje wyszukiwania wynikajace z regul posrednich, jobs -- szczegoly wywolywania polecen, makefile -- diagnostyka przy ponownym tworzeniu makefile, print -- pokazuje wszelkie uruchamiane przepisy, nawet gdy sa ciche oraz why -- pokazuje powody, dlaczego make zdecydowal sie przebudowac kazdy cel. Aby wylaczyc wszystkie poprzednie opcje diagnostyki nalezy podac none. -e, --environment-overrides Daje zmiennym srodowiskowym pierwszenstwo nad zmiennymi plikow makefile. -E lancuch, --eval lancuch Interpretuje lancuch przy pomocy funkcji eval, przed przetworzeniem plikow makefile. -f plik, --file=plik, --makefile=PLIK Jako makefile uzywa pliku. -i, --ignore-errors Ignoruje wszelkie bledy komend wykonywanych przy odswiezaniu plikow. -I katalog, --include-dir=katalog Podaje katalog, w ktorym szukac zalaczanych (included) plikow makefile. Jesli podanych jest kilka opcji -I, to sa on przeszukiwane w podanej kolejnosci. W przeciwienstwie do innych flag make, katalogi podane flagami -I moga nastepowac bezposrednio po fladze: -Idir jest rownowazne -I dir. Skladnia ta jest udostepniona dla kompatybilnosci z flaga -I preprocesora jezyka C. -j [zadania], --jobs[=zadania] Podaje dozwolona liczbe zadan (komend), ktora mozna wykonywac naraz. Jesli jest wiecej niz jedna opcja -j, ostatnia jest znaczaca. Jesli opcja -j jest podana bez argumentu, make nie bedzie ograniczac liczby mozliwych zadan. --jobserver-style=styl Styl jobserver, ktory ma byc uzywany. Styl moze wynosic fifo, pipe lub sem (tylko Windows). -k, --keep-going Kontynuuje ile sie da, po bledzie. Chociaz cel, ktory sie nie powiodl i zaleznosci na nim sie opierajace nie moga byc zbudowane, to mozna przetworzyc inne zaleznosci celow. -l [obciazenie], --load-average[=obciazenie] Okresla, ze nie nalezy uruchamiac nowych zadan (komend) jesli pracuja juz inne, a obciazenie wynosi co najmniej obciazenie (liczba zmiennoprzecinkowa). Bez argumentow, usuwany jest poprzedni limit. -L, --check-symlink-times Uzywa ostatniego mtime miedzy dowiazaniem a celem. -n, --just-print, --dry-run, --recon Wypisuje komendy, ktore bylyby wykonywane, lecz nie wykonuje ich (z wyjatkiem pewnych okolicznosci). -o plik, --old-file=plik, --assume-old=plik Nie odswieza pliku plik nawet jesli jest starszy niz jego zaleznosci i nie odswieza niczego na konto zmian pliku. Ogolnie, plik jest traktowany jako bardzo stary, a jego reguly sa ignorowane. -O[typ], --output-sync[=typ] Przy uruchamianiu wielu zadan rownolegle za pomoca -j, upewnia sie, ze wynik wszystkich zadan jest laczony, zamiast przepleciony pomiedzy soba. Jesli nie poda sie typu lub gdy wynosi on target, grupowany jest wynik calego przepisu dla wszystkich celow. Jesli typ wynosi line, grupowany jest wynik kazdego wiersza polecenia z przepisu. Jesli typem jest recurse, grupowany jest wynik kazdego rekurencyjnego make. Jesli typ wynosi none, synchronizacja wyjscia jest wylaczona. -p, --print-data-base Wypisuje baze danych (reguly i wartosci zmiennych), ktore wynikaja z odczytanych plikow Makefile. Nastepnie wykonuje sie w trybie normalnym, chyba ze podano inaczej. Wypisuje to tez informacje o wersji, podawane przez przelacznik -v (patrz nizej). Aby wypisac baze danych bez odswiezania plikow, prosze uzyc make -p -f/dev/null. -q, --question ,,Tryb pytania". Nie uruchamia zadnych komend i niczego nie wypisuje; zwraca tylko status zakonczenia, ktory moze byc zerowy jesli cele sa swieze, lub niezerowy w innym przypadku. -r, --no-builtin-rules Eliminuje uzywanie wbudowanych regul niejawnych. Czysci tez domyslna liste regul przyrostkowych. -R, --no-builtin-variables Wylacza definiowanie wbudowanych zmiennych. -s, --silent, --quiet Ciche dzialanie; nie wypisuje wykonywanych komend. --no-silent Wylacza -s. -S, --no-keep-going, --stop Wylacza -k. -t, --touch Dotyka plikow (zaznacza je jako odswiezone, bez zmieniania zawartosci), zamiast normalnego uruchamiania komend. Jest to uzywane do udawania, ze komendy zostaly wykonane w celu oglupienia przyszlych wywolan make. --trace Wypisywana jest informacja o dyspozycji kazdego celu (dlaczego cel jest przebudowywany i jakie polecenia sa uruchamiane w celu przebudowania go). -v, --version Wyswietla wersje make, informacje o prawach autorskich, liste autorow oraz zastrzezenie o braku gwarancji. -w, --print-directory Wypisuje komunikat, zawierajacy katalog biezacy przed i po dzialaniu. Moze to byc przydatne do sledzenia bledow w skomplikowanych zagniezdzeniach rekursywnego make. --no-print-directory Wylacza -w, nawet jesli bylo ono wlaczone domyslnie. --shuffle[=TRYB] Wlacza tasowanie kolejnosci celow i zaleznosci wstepnych. TRYB jest jednym z: none, aby wylaczyc tasowanie, random aby tasowac zaleznosci wstepne w losowej kolejnosci, reverse, aby rozwazac zaleznosci wstepne w odwrotnej kolejnosci lub liczba , ktora wlacza tryb random z podana wartoscia ziarna. Jesli pominie sie TRYB, domyslna wartoscia jest random. -W plik, --what-if=plik, --new-file=plik, --assume-new=plik Udaje, ze cel plik zostal wlasnie zmodyfikowany. Po uzyciu z flaga -n, pokazuje to, co staloby sie, gdyby rzeczywiscie zmodyfikowano ten plik. Bez opcji -n, jest to prawie rownowazne uruchomieniu na podanym pliku komendy touch. Jedyna roznica jest fakt, ze czas modyfikacji jest tu zmieniany tylko w wyobrazni make. --warn-undefined-variables Ostrzega przy odwolaniach do niezdefiniowanych zmiennych. STATUS ZAKONCZENIA GNU Make konczy dzialanie z zerem, jesli wszystkie pliki makefile zostaly pomyslnie przeanalizowane i nie wystapily cele, ktorych nie udalo sie zbudowac. Status o wartosci jeden zostanie zwrocony jesli podano -q, a make stwierdzil, ze cel wymaga przebudowania. Status o wartosci dwa oznacza wystapienie bledow. ZOBACZ TAKZE Pelna dokumentacja dla programu make jest utrzymywana jako podrecznik Texinfo. Jesli programy info oraz make sa wlasciwie zainstalowane, polecenie info make powinno dac dostep do pelnego podrecznika. USTERKI Zob. rozdzial ,,Problems and Bugs" w The GNU Make Manual. AUTOR Podrecznik ten zostal stworzony przez Dennisa Morse'a z Uniwersytetu Stanforda. Dalsze aktualizacje wprowadzil Mike Frysinger. Podrecznik zostal przepisany przez Rolanda McGratha. Utrzymuje go Paul Smith. PRAWA AUTORSKIE Copyright (C) 1992-1993, 1996-2023 Free Software Foundation, Inc. Ten plik jest czescia GNU make. GNU Make jest wolnym oprogramowaniem; mozna go dystrybuowac i/lub modyfikowac zgodnie z warunkami licencji GNU General Public License opublikowanej przez Free Software Foundation; w wersji 3 Licencji lub (wedle uznania) pozniejszej. GNU Make rozpowszechniany jest z nadzieja, iz bedzie uzyteczny - jednak BEZ JAKIEJKOLWIEK GWARANCJI, nawet domyslnej gwarancji PRZYDATNOSCI HANDLOWEJ albo PRZYDATNOSCI DO OKRESLONYCH ZASTOSOWAN. W celu uzyskania blizszych informacji siegnij do Powszechnej Licencji Publicznej GNU. Wraz z make powinienes otrzymac egzemplarz Powszechnej Licencji Publicznej GNU (GNU General Public License) - zob. https://www.gnu.org/licenses/. TLUMACZENIE Autorami polskiego tlumaczenia niniejszej strony podrecznika sa: Przemek Borys i Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . GNU 26 maja 2023 r. MAKE(1)