Setul de instrumente Linux face programarea

Utilitarul determină automat ce piese dintr-un program de mare trebuie să fie recompilate și comenzi pentru a le recompilati. Cel mai frecvent folosit pentru a face C-compilarea programelor și conține caracteristici orientate în mod special pentru astfel de sarcini, dar puteți utiliza face cu orice limbaj de programare. Mai mult decât atât, aplicarea face utilitate nu se limitează la programe. Ee poate fi folosit pentru a descrie orice sarcină în cazul în care unele fișiere trebuie să fie generate automat de la alți utilizatori atunci când acestea sunt modificate.

Înainte de a face uz. aveți nevoie pentru a crea un fișier numit make-fișier. care descrie relațiile dintre fișierele din programul dvs. și conține comenzi pentru actualizarea fiecare fișier. De obicei, fișierul executabil depinde fișierele obiect care, la rândul lor, depind de fișierele sursă și fișierele antet. Pentru a denumi make-numele de fișier GNUmakefile recomandat. Makefile sau Makefile. și căutarea merge în această ordine. Dacă trebuie să utilizați un nume personalizat, acesta poate fi transmis în mod clar prin opțiunea -f.
Când make-fișier este deja scris, este suficient pentru a executa în directorul în care este comanda make. Simplu make-fișier constă din reguli (instrucțiuni) din formularul de mai jos:

VAR = VALUE. SCOP. DEPENDENȚA. ECHIPA 1
COMANDĂ 2 = VALOARE VARIABILĂ. SCOP. DEPENDENȚA. Comanda 1 Comanda 2
etc.

face [Opțiuni] [Variabila = 'abc'] [Target]

paranteze pătrate denotă prezența opțională a acestei părți.
Scopul - numele țintei care urmează să fie executat.
Variable = 'abc' variabile -pereopredelenie. Valorile variabilelor au prioritate mai mare a intrat în linia de comandă decât definiția din make-fișier.
opțiuni:
-fișier f - un nume de referință clar make-fișier. în cazul în care locul de muncă este omis, apoi a căutat fișiere GNUmakefile. Makefile sau Makefile.
-n - o imitație de acțiune cu nici o performanță reală, este utilizat pentru a depana.
-T - schimbarea timpului de modificare a scopului, fără efectiv de executare.
-q - verificați necesitatea de a actualiza țintă, fără de fapt, de executare.

Reguli pentru scrierea Makefile

Ordinea regulilor este lipsită de relevanță. În mod implicit, obiectivul principal este de a face scopul prima regulă în primele make-fișiere. În cazul în care prima regulă are mai multe obiective, numai prima tinta este luat ca țintă prestabilită. Scopul, începând cu punctul, nu este utilizat ca țintă în mod implicit, în cazul în care acesta nu conține una sau mai multe din caracterul „/“, și anume specifică calea către fișierul; În plus, implicit nu este utilizat de țintă, definirea regulilor de model.
Ca o țintă sau de dependență poate utiliza o listă de fișiere separate prin spații sau un model în stil coajă.
Tiparele sunt interpretate în momentul regulii, atunci când atribuiți o interpretare model de variabilă nu va fi atribuit listei de fișiere de variabila utilizată wildcard funcție specială.


obiecte: = $ (wildcard * .o
edita: * .o
cc * .o edita o-

Pentru generarea automată de dependențe din fișierele antet în limbajul C, puteți utiliza comanda gcc -M file.c sau file.c. -MM CGC Al doilea exemplu de realizare nu generează în funcție de fișierele antet de sistem. Comanda poate fi folosit variabile automate. Aceste variabile sunt re-calculate pentru fiecare în conformitate cu normele pe baza unor reguli obiective și dependențe.

Folosind acțiunea implicită.

țintă #default - fișier de editare
edita. main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
cc o- edita main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o

main.o. defs.h main.c
cc -c main.c
kbd.o. kbd.c defs.h command.h
cc -c kbd.c
command.o. command.c defs.h command.h
cc -c command.c
display.o. display.c defs.h buffer.h
cc -c display.c
insert.o. insert.c defs.h buffer.h
cc -c insert.c
search.o. search.c defs.h buffer.h
cc -c search.c
files.o. files.c defs.h buffer.h command.h
cc -c files.c
utils.o. defs.h utils.c
cc -c utils.c
curat.
rm edita main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o

În mod implicit, face începe cu prima regulă (nu de numărare reguli ale căror nume țintă încep cu „“). Aceasta se numește obiectivul implicit. În cazul nostru, este de obicei de editare. Dacă modificați fișierul este mai nou decât fișierele obiect de care depinde, atunci nimic nu se va întâmpla. În caz contrar, înainte de a face poate procesa pe deplin această regulă, trebuie să proceseze recursiv reguli pentru fișierele pe care le modificați. Fiecare dintre aceste fișiere sunt procesate în conformitate cu propriile sale reguli. Recompilarea trebuie să se facă în cazul în care fișierul sursă sau la oricare dintre fișierele header menționate printre dependențe actualizate mai târziu decât fișierul obiect, sau dacă fișierul obiect nu există.
regula Clean nu se potrivește cu orice fișier care urmează să fie creat și, prin urmare, curat sau nu depinde de nimic în sine nu este inclus în lista de dependențe. În cazul în care implicit de start-up nu va fi numit curat. Pentru a-l executa, trebuie să specificați în mod explicit obiectivul atunci când executați marca: face curat
Pentru concizie, puteți utiliza variabile și acțiuni implicite (regula implicită)

obiecte = main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o

edita. $ (Obiecte)
cc edita $ o- (obiecte)
main.o. defs.h
kbd.o. command.h defs.h
command.o. command.h defs.h
display.o. buffer.h defs.h
insert.o. buffer.h defs.h
search.o. buffer.h defs.h
files.o. defs.h buffer.h command.h
utils.o. defs.h
.False. curat
curat.
-rm edita $ (obiecte)

Obiectele variabile pot fi folosite o dată o listă scrisă de fișiere obiect, și fișierele obiect pentru built-in a face regula implicită implicită

file.c: file.o cc -c file.c

.PHONY specială Scopul este o marcă built-in și se determină în funcție de modul în care poarta numele care nu au nici un meci în formă de fișiere. În cazul în care această regulă pentru a sări peste, apoi crearea fișierului în directorul curent cu numele de bloc curat punerea în aplicare a face curat.
Folosind politica implicită vă permite să schimbați stilul de înregistrări de dependență:

obiecte = main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o

edita. $ (Obiecte)
cc edita $ o- (obiecte)

$ (Obiecte). defs.h
kbd.o command.o files.o. command.h
display.o insert.o search.o files.o. buffer.h

Această înregistrare indică faptul că toate fișierele obiect depind de defs.h. fișierul antet dar dependențe suplimentare sunt verificate pentru unele dintre ele.