Scroll to navigation

MAKE(1) Comenzi utilizator MAKE(1)

NUME

make - ustensila GNU make pentru a menține grupuri de programe

SINOPSIS

make [OPȚIUNE]... [ȚINTĂ]...

DESCRIERE

Ustensila make va determina în mod automat care părți ale unui program mare trebuie recompilate și va emite comenzile necesare pentru a le recompila. Manualul descrie implementarea GNU a lui make, care a fost scrisă de Richard Stallman și Roland McGrath și este în prezent întreținută de Paul Smith. Exemplele noastre prezintă programe C, deoarece acestea sunt foarte comune, dar puteți utiliza make cu orice limbaj de programare al cărui compilator poate fi rulat cu o comandă shell. De fapt, make nu este limitat la programe. Îl puteți utiliza pentru a descrie orice sarcină în care unele fișiere trebuie să fie actualizate automat din altele ori de câte ori acestea se modifică.

Pentru a vă pregăti pentru să utilizați make, trebuie să scrieți un fișier numit makefile care descrie relațiile dintre fișierele din programul dumneavoastră, precum și comenzile pentru actualizarea fiecărui fișier. Într-un program, în mod obișnuit, fișierul executabil este actualizat din fișierele obiect, care la rândul lor sunt realizate prin compilarea fișierelor sursă.

Odată ce există un makefile adecvat, de fiecare dată când modificați unele fișiere sursă, această simplă comandă shell:

make

este suficientă pentru a efectua toate recompilările necesare. Programul make utilizează descrierea fișierului makefile și orele ultimei modificări a fișierelor pentru a decide care dintre fișiere trebuie actualizate. Pentru fiecare dintre aceste fișiere, el emite comenzile înregistrate în makefile.

make execută comenzile din makefile pentru a actualiza unul sau mai multe nume țintă, unde nume este de obicei un program. Dacă nu este prezentă opțiunea -f, make va căuta fișierele makefile GNUmakefile, makefile și Makefile, în această ordine.

În mod normal, ar trebui să numiți fișierul „makefile” fie makefile, fie Makefile; (se recomandă Makefile, deoarece apare în mod proeminent la începutul unei liste de directoare, chiar lângă alte fișiere importante, cum ar fi README). Primul nume verificat, GNUmakefile, nu este recomandat pentru majoritatea fișierelor „makefile”. Ar trebui să folosiți acest nume dacă aveți un „makefile” care este specific GNU make și care nu va fi înțeles de alte versiuni de make. Dacă makefile este „-”, se citește intrarea standard.

make actualizează o țintă în cazul în care aceasta depinde de fișiere premergătoare care au fost modificate de la ultima modificare a țintei sau în cazul în care aceasta nu există.

OPȚIUNI

Aceste opțiuni sunt ignorate pentru compatibilitate cu alte versiuni de make.
Face în mod necondiționat toate țintele.
Schimbă la directorul director înainte de a citi fișierele „makefiles” sau de a face orice altceva. Dacă sunt specificate mai multe opțiuni -C, fiecare dintre ele este interpretată în raport cu cea anterioară: -C / -C etc este echivalent cu -C /etc. Acest lucru este utilizat de obicei cu invocări recursive ale make.
Afișează informații de depanare în plus față de procesarea normală. Informațiile de depanării spun ce fișiere sunt luate în considerare pentru refacere, ce timpi de fișier sunt comparați și cu ce rezultate, ce fișiere trebuie refăcute, ce reguli implicite sunt luate în considerare și care sunt aplicate - tot ceea ce este interesant despre modul în care make decide ce să facă.
Afișează informații de depanare în plus față de procesarea normală. Dacă FANIOANELE sunt omise, atunci comportamentul este același ca și în cazul în care ar fi fost specificată -d. FANIOANE poate fi a pentru toate ieșirile de depanare (la fel ca la utilizarea -d), b pentru depanare de bază, v pentru depanare de bază mai detaliată, i pentru afișarea regulilor implicite, j pentru detalii privind invocarea comenzilor și m pentru depanare în timpul refacerii fișierelor makefile. Utilizați n pentru a dezactiva toate fanioanele de depanare anterioare.
Acordă variabilelor preluate din mediu prioritate față de variabilele din fișierele makefile.
Folosește fișier ca fișier makefile.
Ignoră toate erorile din comenzile executate pentru refacerea fișierelor.
Specifică un director director în care se caută fișierele makefile incluse. În cazul în care se utilizează mai multe opțiuni -I pentru a specifica mai multe directoare, directoarele sunt căutate în ordinea specificată. Spre deosebire de argumentele altor opțiuni de make, directoarele date cu opțiunea -I pot veni direct după opțiune: -Idirector este permis, precum și -I director. Această sintaxă este permisă pentru compatibilitate cu indicatorul -I al preprocesorului C.
Specifică numărul de lucrări (comenzi) care trebuie să ruleze simultan. În cazul în care există mai multe opțiuni -j, ultima este cea care are efect. Dacă opțiunea -j este dată fără un argument, make nu va limita numărul de lucrări care pot fi executate simultan. Atunci când make invocă un sub-make, toate instanțele make se vor coordona pentru a rula simultan numărul specificat de lucrări; a se vedea secțiunea MAKE ÎN PARALEL ȘI SERVERUL DE LUCRĂRI pentru detalii.
Opțiunea internă pe care make o folosește pentru a transmite numerele descriptorilor de fișiere de citire și scriere a conductelor de la serverul de lucrări către sub-make; a se vedea secțiunea MAKE ÎN PARALEL ȘI SERVERUL DE LUCRĂRI pentru detalii.
Continuă cât mai mult posibil după o eroare. În timp ce obiectivul care a eșuat și cele care depind de acesta nu pot fi refăcute, celelalte dependențe ale acestor obiective pot fi procesate în continuare.
Specifică faptul că nu trebuie să se pornească noi lucrări (comenzi) dacă există alte lucrări în curs de execuție și dacă media de încărcare este de cel puțin medie-încărcare (un număr în virgulă mobilă). Fără nici un argument, elimină o limită de încărcare anterioară.
Utilizează cel mai recent timp mtime între legăturile simbolice și țintă.
Afișează comenzile care ar trebui executate, dar nu le execută (cu excepția anumitor circumstanțe).
Nu reface fișierul fișier chiar dacă este mai vechi decât dependențele sale și nu reface nimic din cauza modificărilor din fișier. În esență, fișierul este tratat ca fiind foarte vechi, iar regulile sale sunt ignorate.
Când se execută mai multe lucrări în paralel cu -j, se asigură că rezultatele fiecărei lucrări sunt colectate împreună și nu intercalate cu rezultatele altor lucrări. Dacă tip nu este specificat sau este target, ieșirea de la întreaga rețetă pentru fiecare țintă este grupată împreună. Dacă tip este line, se grupează ieșirile de la fiecare linie de comandă din cadrul unei rețete. Dacă tip este recurse, se grupează ieșirile de la o întreagă rețetă recursiv. Dacă tip este none, sincronizarea ieșirii este dezactivată.
Afișează baza de date (reguli și valori ale variabilelor) care rezultă din citirea fișierelor de rețete „makefile”; apoi execută ca de obicei sau astfel cum este specificat. Aceasta afișează, de asemenea, informațiile despre versiune date de opțiunea -v (a se vedea mai jos). Pentru a afișa baza de date fără a încerca să refaceți niciun fișier, utilizați make -p -f/dev/null.
Activează „modul de întrebare”. Nu execută nicio comandă și nu afișează nimic; returnează doar o stare de ieșire care este zero dacă țintele specificate sunt deja actualizate, altfel nu este zero.
Elimină utilizarea regulilor implicite încorporate. De asemenea, elimină lista implicită de sufixe pentru regulile de sufixare.
Nu definește nicio variabilă încorporată.
Operare silențioasă; nu se afișează comenzile pe măsură ce sunt executate.
Anulează efectul opțiunii -k. Acest lucru nu este niciodată necesar, cu excepția unui make recursiv în care -k ar putea fi moștenit de la make de nivel superior prin MAKEFLAGS sau dacă ați definit -k în MAKEFLAGS în mediul dumneavoastră.
Accesează fișierele (le marchează la data curentă fără a le modifica cu adevărat) în loc să execute comenzile acestora. Acest lucru este folosit pentru a pretinde că au fost executate comenzile, pentru a păcăli viitoarele invocări ale lui make.
Sunt afișate informații despre dispoziția fiecărei ținte (de ce este reconstruită ținta și ce comenzi sunt executate pentru a o reconstrui).
Imprimă versiunea programului make plus drepturile de autor, o listă a autorilor și o notificare că nu există nicio garanție.
Afișează un mesaj care conține directorul de lucru înainte și după alte procesări. Acest lucru poate fi util pentru depistarea erorilor din imbricări complicate de comenzi make recursive.
Dezactivează -w, chiar dacă a fost activată implicit.
Pretinde că obiectivul fișier tocmai a fost modificat. Atunci când este utilizată cu opțiunea -n, aceasta vă arată ce s-ar întâmpla dacă ați modifica fișierul respectiv. Fără -n, este aproape la fel ca și cum ați executa o comandă touch pe fișierul dat înainte de a executa make, cu excepția faptului că timpul de modificare este schimbat doar în imaginația lui make.
Avertizează atunci când se face referire la o variabilă nedefinită.

STARE DE IEȘIRE

GNU make iese cu o stare de zero dacă toate fișierele de rețete au fost analizate cu succes și nu a eșuat nicio țintă construită. O stare de unu va fi returnată dacă a fost utilizată opțiunea -q și make determină că o țintă trebuie reconstruită. O stare de doi va fi returnată dacă au fost întâlnite erori.

CONSULTAȚI ȘI

Documentația completă pentru make este menținută ca un manual Texinfo. Dacă programele info și make sunt instalate corect în sistemul dvs., comanda

info make

ar trebui să vă ofere acces la manualul complet. În plus, manualul este disponibil și online la adresa https://www.gnu.org/software/make/manual/html_node/index.html.

MAKE ÎN PARALEL ȘI SERVERUL DE LUCRĂRI

Utilizând opțiunea -j, utilizatorul poate instrui make să execute sarcini în paralel. Prin specificarea unui argument numeric pentru -j, utilizatorul poate specifica o limită superioară a numărului de sarcini paralele care urmează să fie executate.

Atunci când mediul de construcție este de așa natură încât un make de nivel superior invocă sub-make (de exemplu, un stil în care fiecare subdirector conține propriul Makefile ), nici o instanță individuală a make nu știe câte sarcini rulează în paralel, astfel încât menținerea numărului de sarcini sub limita superioară ar fi imposibilă fără o comunicare între toate instanțele make care rulează. Deși sunt fezabile soluții cum ar fi ca nivelul superior make să servească drept controlor central sau se pot crea alte mecanisme de sincronizare, cum ar fi memoria partajată sau soclurile, implementarea actuală utilizează o simplă conductă partajată.

Această conductă este creată de procesul make de nivel superior și transmisă tuturor proceselor sub-make. Procesul make de nivel superior scrie N-1 jetoane de un octet în conductă (se presupune că make de nivel superior își rezervă un jeton pentru el însuși). Ori de câte ori oricare dintre procesele make (inclusiv make de nivel superior) trebuie să execute o nouă sarcină, citește un octet din conducta partajată. În cazul în care nu mai există jetoane, trebuie să aștepte ca un jeton să fie scris înapoi în conductă. Odată ce sarcina este finalizată, procesul make scrie din nou un jeton în conductă (și astfel, dacă jetoanele au fost epuizate, deblochează primul proces make care aștepta să citească un jeton). Deoarece numai N-1 jetoane au fost scrise în conductă, nu pot fi în curs de execuție mai mult de N sarcini la un moment dat.

În cazul în care lucrarea care urmează să fie executată nu este un sub-make, atunci make va închide descriptorii de fișiere de conductă de la serverul de lucrări înainte de a invoca comenzile, astfel încât comanda să nu poată interfera cu serverul de lucrări, și comanda să nu găsească niciun descriptor de fișiere neobișnuit.

ERORI

Consultați capitolul „Problems and Bugs” din Manualul GNU Make.

AUTOR

Această pagină de manual a fost realizată de Dennis Morse de la Universitatea Stanford. Actualizări suplimentare realizate de Mike Frysinger. A fost refăcută de Roland McGrath. Întreținută de Paul Smith.

DREPTURI DE AUTOR

Drepturi de autor © 1992-1993, 1996-2016 Free Software Foundation, Inc. Acest fișier face parte din GNU make.

GNU Make este un software liber; îl puteți redistribui și/sau modifica în conformitate cu termenii Licenței Publice Generale GNU, așa cum a fost publicată de Free Software Foundation; fie versiunea 3 a licenței, fie (la alegerea dumneavoastră) orice versiune ulterioară.

GNU Make este distribuit în speranța că va fi util, dar FĂRĂ NICI O GARANȚIE; nici măcar garanția implicită de COMERCIALIZARE sau de ADECVARE LA UN SCOP PARTICULAR. Pentru mai multe detalii, consultați Licența publică generală GNU.

Ar fi trebuit să primiți o copie a Licenței Publice Generale GNU împreună cu acest program. Dacă nu, consultați pagina http://www.gnu.org/licenses/..

TRADUCERE

Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.

28 februarie 2016 GNU