This shows you the differences between two versions of the page.
uso:laboratoare:laborator-06:make-simple-automation [2021/10/04 20:43] 127.0.0.1 external edit |
— (current) | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Introducere în utilitarul Make și fișiere Makefile ====== | ||
- | |||
- | În secțiunile anterioare, am compilat fișiere cod sursă C folosind compilatorul GCC. Dezvoltarea unui program este un proces //continuu//, nu scriem tot codul dintr-o singură iterație și de multe ori ajungem să îl modificăm pe parcurs. Vrem să testăm schimbările aduse în program. Pentru aceasta trebuie să //recompilăm// fișierul pe care l-am modificat și să creăm un nou executabil. | ||
- | |||
- | Automatizarea procesului de compilare ne ajută să fim eficienți atunci când dezvoltăm un proiect. În loc să dăm de fiecare dată toate comenzile pentru recompilarea fișierelor, putem să dăm o singură comandă care să le facă pe toate. Acest proces se numește //build automation//. Există mai multe soluții de build automation((Exemple de soluții de build automation sunt [[https://maven.apache.org|Maven]], [[https://ant.apache.org|Ant]], [[https://gradle.org|Gradle]]. | ||
- | |||
- | https://en.wikipedia.org/wiki/Build_automation | ||
- | |||
- | https://www.softwaretestinghelp.com/best-build-automation-software-tools/ | ||
- | )). În această carte vom folosi utilitarul [[https://linux.die.net/man/1/make|Make]] împreună cu fișiere [[https://www.gnu.org/software/make/manual/make.html#Makefiles|Makefile]] ca să automatizăm procesul de compilare. | ||
- | |||
- | În secțiunile următoare vom folosi vedea cum funcționează utilitarul Make și cum arată un fișier Makefile. | ||
- | |||
- | ===== Folosirea unui Makefile existent ===== | ||
- | |||
- | <note warning> | ||
- | Înainte să treceți mai departe, intrați în directorul ''%%~/uso-lab%%'' și rulați comanda ''%%git pull%%''. | ||
- | </note> | ||
- | |||
- | În această secțiune vom compila programul [[https://rextester.com/WYT71966|Hangman]] folosind un fișier Makefile. | ||
- | |||
- | Întrăm în directorul ''%%~/uso-lab/labs/04-appdev/support/simple-make%%'' folosind comanda ''%%cd%%'': | ||
- | |||
- | <code bash> | ||
- | student@uso:~$ cd ~/uso-lab/labs/04-appdev/support/simple-make | ||
- | student@uso:~/uso-lab/labs/04-appdev/support/simple-make$ ls | ||
- | hangman.c Makefile | ||
- | </code> | ||
- | Avem în director un fișier cod sursă C, ''%%hangman.c%%'', și un fișier Makefile. Ca să compilăm programul, folosim comanda ''%%make%%'': | ||
- | |||
- | <code bash> | ||
- | student@uso:~/uso-lab/labs/04-appdev/support/simple-make$ make | ||
- | gcc -o hangman hangman.c | ||
- | student@uso:~/uso-lab/labs/04-appdev/support/simple-make$ ls | ||
- | hangman hangman.c Makefile | ||
- | </code> | ||
- | Comanda ''%%make%%'' a rulat, de fapt, comanda ''%%gcc -o hangman hangman.c%%'', comandă prin care am creat fișierul executabil ''%%hangman%%''. | ||
- | |||
- | Practic, scriind doar comanda ''%%make%%'', am trecut fișierul ''%%hangman.c%%'' prin toate etapele compilării și am obținut executabilul final, așa cum am făcut în secțiunea ''%%Compilarea unui fișier cod sursă C%%'' pentru fișierul ''%%is-prime.c%%''. | ||
- | |||
- | Rulăm executabilul ''%%hangman%%'' ca să vedem că funcționează, ca în imaginea de mai jos: | ||
- | |||
- | {{:uso:laboratoare:laborator-04:run-hangman.gif?700}} | ||
- | |||
- | ===== Înțelegerea formatului Makefile ===== | ||
- | |||
- | În secțiunea anterioară, ''%%Folosirea unui Makefile existent%%'', am folosit fișierul ''%%Makefile%%'' ca să compilăm programul Hangman. Ca să putem crea un Makefile pentru un proiect al nostru, trebuie să înțelegem formatul fișierului Makefile. În această secțiune vom folosi fișierul Makefile pe care l-am folosit anterior. | ||
- | |||
- | Fișierul ''%%Makefile%%'' folosit la programul Hangman are următorul conținut: | ||
- | |||
- | |||
- | <code > | ||
- | all: hangman | ||
- | |||
- | hangman: hangman.c | ||
- | gcc -o hangman hangman.c | ||
- | |||
- | clean: | ||
- | rm -rf hangman | ||
- | </code> | ||
- | Liniile din fișier sunt de două tipuri: | ||
- | |||
- | - **Regulă**, care are formatul ''%%regulă: <dependență>%%'' (''%%all: hangman%%'' sau ''%%clean:%%''). | ||
- | - **Comandă**, care începe cu un ''%%Tab%%'' la începutul rândului, urmat de o comandă (''%%gcc -o hangman hangman.c%%''). | ||
- | |||
- | O //regulă// din fișierul Makefile este, de fapt, un nume asociat unei //comenzi//. Spunem că rulăm //regula// ''%%clean%%'' atunci când vrem să executăm //comanda// ''%%rm -rf hangman%%''. În terminal, facem acest lucru folosind comanda ''%%make%%'' urmată de numele regulii, în acest caz ''%%make clean%%'': | ||
- | |||
- | <code bash> | ||
- | student@uso:~/uso-lab/labs/04-appdev/support/simple-make$ make clean | ||
- | rm *.o hangman | ||
- | student@uso:~/uso-lab/labs/04-appdev/support/simple-make$ ls | ||
- | hangman.c Makefile | ||
- | </code> | ||