face
face software | |
---|---|
Tip | Automatizarea dezvoltării |
Dezvoltator | Stuart Feldman |
Data primei versiuni | Aprilie 1976 |
Sistem de operare | Unix-like |
Limba | C. |
Licență | Licență publică generală GNU ( Licență gratuită ) |
Limbă | Engleză |
Marca este un utilitar , dezvoltat pe sistemele de operare ale familiei UNIX , dar disponibil pe o gamă largă de sisteme, care automatizează procesul de creare a fișierelor care depind de alte fișiere, rezolvarea dependențelor și invocarea programelor externe pentru munca necesară.
Această gestionare a dependenței este foarte simplă și se bazează pe ultima dată și ora modificate ale fișierelor afectate.
Utilitarul este utilizat în principal pentru compilarea codului sursă în codul obiect , fuzionarea și apoi legarea codului obiect în programe sau biblioteci executabile . Acesta folosește fișiere numite makefiles pentru a determina gradul de dependențe pentru o anumită ieșire și scripturile de compilare necesare pentru a trece la shell . Termenul makefile derivă din numele dat de obicei fișierului de intrare make.
Origine
Acum există utilități de verificare a dependenței, dar „make” este de fapt cel mai utilizat utilitar, în principal datorită includerii sale de sisteme de operare Unix . A fost creat de Stuart Feldman în 1977 în Bell Laboratories ( Bell Labs ). În 2003 , Dr. Feldman a primit premiul: ACM , pentru inventarea acestui instrument important. Înainte de invenția make, sistemul de construire UNIX consta pur și simplu din „make” și „install”, care erau simple scripturi shell, împreună cu codul sursă al unui program. Abilitatea de a amesteca comenzi / instrucțiuni pentru diferite ținte într-un singur fișier și de a putea abstractiza verificarea și urmărirea dependenței a fost un pas important înainte pentru cele mai avansate medii de construcții.
Versiuni moderne
Make a fost rescris de mai multe ori și în unele cazuri au fost scrise de la zero variante, care utilizează același format de fișier și același algoritm de bază. Trei versiuni rescrise ale celei mai comune și tradiționale mărci sunt:
- BSD make, care este derivat din munca lui Adam de Boor pe o versiune de make capabilă să construiască ținte în paralel și funcționează cu diverse modificări în FreeBSD , NetBSD și OpenBSD .
- GNU make, care face parte din (aproape) toate distribuțiile GNU / Linux, este utilizat împreună cu sistemul de construcție GNU . Una dintre principalele diferențe cu BSD make este că acesta din urmă are un set implicit de macrocomenzi, GNU make utilizează de obicei un set extern de macrocomenzi precum M4.
- NMAKE, instrumentul de construcție livrat cu Visual C ++ .
POSIX include standardizarea caracteristicilor de bază și a operațiunilor make, datorită acestui fapt este posibil să utilizați Makefiles simple în mai multe variante de make, unele versiuni ale GNU și BSD make vor căuta fișiere GNUmakefile și respectiv BSDmakefile.
Utilizare și critici
Make are partea sa de fani și non-fani. Multe probleme au apărut atunci când încercăm să folosim marca cu proiecte moderne sau mari, dar mulți oameni au subliniat că marca funcționează foarte bine, este ușor de utilizat și foarte puternic. Este folosit pentru a compila și gestiona (aproape) orice sistem de operare, iar multe înlocuiri moderne sunt foarte asemănătoare cu modul în care funcționează „real”. La fel, multe limbaje de programare moderne au propriile lor modalități specifice de detectare a dependențelor.
Odată cu apariția mediilor integrate de dezvoltare (IDE), în special pe platformele non-UNIX, mulți programatori nu urmăresc și gestionează manual dependențele sau chiar listează fișierele care fac parte din proiect, lasă aceste lucruri mediului lor de dezvoltare automatizat .
Structura unui makefile
Un makefile este format din linii de text care definesc un fișier (sau un grup de fișiere) sau numele unei reguli dependente de grupul de fișiere. Fișierele generate sunt marcate ca fișiere sursă , în timp ce fișierele sursă sunt marcate în funcție de fișierele incluse intern. După ce fiecare dependență este declarată, poate urma o serie de linii indentate (din file ) care definesc modul de transformare a fișierelor de intrare în fișiere de ieșire, dacă prima a fost modificată mai recent decât cea din urmă. În cazul în care astfel de definiții sunt prezente, acestea se referă la scripturile de compilare și sunt transmise la shell pentru a genera fișierele țintă.
Structura de bază este:
# Comentariile folosesc hash
țintă : dependențe
comanda 1
comanda 2
.
.
.
comanda n
Un makefile poate conține, de asemenea, definiții variabile și incluziuni ale altor makefiles. Variabilele din makefiles pot fi anulate de argumentele transmise utilității make din linia de comandă . Aceasta permite utilizatorului să specifice comportamente diferite ale scriptului compilatorului și cum să invoce programe, precum și alte lucruri. De exemplu, variabila „CC” este frecvent utilizată în makefiles pentru a se referi la compilatorul C și utilizatorul ar putea oferi o alternativă la care compilator să utilizeze.
Exemplu de makefile
Mai jos este un exemplu de makefile care compilează o sursă numită „helloworld.c” folosind cc, un compilator C. Eticheta PHONY este o tehnicitate care spune că un anumit nume țintă nu produce un fișier. Simbolurile $ @ și $ <sunt două dintre cele numite variabile automate și reprezintă numele țintei. Există și alte variabile automate.
Rețineți că în ținta „curată”, un minus precede comanda, spunând make pentru a ignora erorile în timpul executării comenzii; face ieșiri în mod normal dacă executarea unei comenzi eșuează în orice moment. În cazul țintei de curățare, denumită în mod obișnuit „curat”, doriți să eliminați fiecare fișier generat în procesul de compilare, fără a ieși dacă fișierele de șters nu există. Prin adăugarea etichetei PHONY la curățare, se împiedică make să aștepte un fișier de la țintă. În acest caz particular, prefixul minus din comandă este redundant și, în cazuri obișnuite, opțiunea -fo „forță” adăugată la rm împiedică ieșirea rm din cauza inexistenței unui fișier.
SHELL = / bin / sh #Shell de utilizat pentru executarea comenzilor
CC = cc #Compilator de utilizat
OBIECTE = helloworld.o # Obiect fișier
SRCS = helloworld.c # Fișier sursă
#target "helloworld" necesită $ (OBIECTE) pentru a compila
helloworld : $ ( OBIECTE )
$ ( CC ) -o $ @ $ <
#target "helloworld.o" necesită $ (SRCS) pentru a crea fișiere obiect
helloworld.o : $ ( SRCS )
$ ( CC ) -c -o $ @ $ <
#target "clean" curăță fișierele obiect și binele din directorul curent
curat :
rm -f helloworld helloworld.o
#target "clean" nu este un fișier!
.FONIE : curat
Elemente conexe
Instrumente similare
Make este cu siguranță cel mai cunoscut instrument pentru automatizarea construcției de proiecte, dar există și alte instrumente, similare cu marca:
- ant Instrument foarte popular pentru gestionarea proiectelor Java mari, inclus în Eclipse. Utilizați un fișier XML pentru configurarea proiectului.
- Maven instrument similar cu furnică, utilizat în Android Studio (și nu, desigur)
- Rake: Un instrument de construcție bazat pe Ruby
Alte proiecte
- Wikimedia Commons conține imagini sau alte fișiere pe Make
linkuri externe
- Utilitatea make și fișierele make - Ghidul C - Programming.HTML.it , pe programming.html.it .
- ( RO ) Specificațiile de bază ale grupului deschis Numărul 6 IEEE Std 1003.1, ediția 2004 manual , la opengroup.org .
- ( RO ) Manualul GNU make , la gnu.org .
- ( RO ) FreeBSD face manual , la freebsd.org .
- ( RO ) Compilarea și rularea programelor C ++ în Linux , la hepwww.ph.qmw.ac.uk (arhivat din original la 13 februarie 2006) .
- ( RO )Tutorial Makefile , pe opussoftware.com .
- (EN) make7 - Marcă open source (scrisă în seed7 )
Controlul autorității | VIAF (EN) 176 684 165 · LCCN (EN) n92090404 · GND (DE) 4334388-0 |
---|