Differences

This shows you the differences between two versions of the page.

Link to this comparison view

uso:laboratoare:laborator-06:make-simple-automation [2021/11/09 12:18]
liza_elena.babu
— (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șierele pe care le-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. * Putem să evităm compilarea unor fișiere pe care nu le-am modificat de la ultima compilare, astfel salvând mult timp. 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 laborator 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 vedea cum funcționează utilitarul ''​%%make%%''​ și cum arată un fișier Makefile. După, vom crea un fișier Makefile pentru un proiect dat. 
- 
-===== Folosirea unui Makefile existent ===== 
- 
-Î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:​~/​.../​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 existent, astfel că putem utiliza comanda ''​%%make%%''​. Aceasta va rula scriptul scris în Makefile, care, în cazul nostru, urmărește compilarea fișierului hangman.c. 
- 
-<code bash> 
-student@uso:​~/​.../​04-appdev/​support/​simple-make$ make 
-gcc -c hangman.c 
-gcc -o hangman hangman.o 
-student@uso:​~/​.../​04-appdev/​support/​simple-make$ ls 
-hangman ​ hangman.c ​ hangman.o ​ Makefile 
-</​code>​ 
-Comanda ''​%%make%%''​ a rulat, de fapt, 2 comenzi: 
- 
-  - De //​compilare//:​ ''​%%gcc -c hangman.c%%'',​ comandă prin care am creat fișierul obiect ''​%%hangman.o%%''​ 
-  - De //legare//: ''​%%gcc -o hangman hangman.o%%'',​ comandă prin care am creat executabilul ''​%%hangman%%''​. 
- 
-Practic, scriind doar comanda ''​%%make%%'',​ am trecut fișierul ''​%%hangman.c%%''​ prin toate etapele compilării și am obținut executabilul final. 
- 
-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 ca suport. 
- 
-Fișierul ''​%%Makefile%%''​ folosit la programul Hangman are următorul conținut: 
- 
-<code > 
-all: hangman 
- 
-hangman: hangman.o 
-    gcc -o hangman hangman.o 
- 
-hangman.o: hangman.c 
-    gcc -c hangman.c 
- 
-clean: 
-    rm -rf *.o hangman 
-</​code>​ 
-Liniile din fișier sunt de două tipuri: 
- 
-1. **Regulă**,​ care are formatul ''​%%regulă:​ <​dependență>​%%''​ (''​%%all:​ hangman%%''​ sau ''​%%clean:​%%''​). Regula trebuie să existe, dependența este opțională. O //regulă// din fișierul Makefile este, de fapt, un nume asociat unui unei comenzi. 
- 
-<code bash> 
-student@uso:​~/​support/​simple-make$ make clean 
-rm *.o hangman 
-student@uso:​~/​support/​simple-make$ ls 
-hangman.c ​  ​Makefile 
-</​code>​ 
-2. Observăm deci că putem rula ''​%%make + <nume regulă>​%%'',​ dar și ''​%%make%%''​ simplu. Utilizând prima formă, din fișierul Makefile se va executa doar regula dorită, în cazul nostru fiind codul specific regulii '​clean'​. Utilizând a doua formă, simplă, se va apela implicit prima regulă găsită din fișierul Makefile, în cazul nostru regula '​all'​. Aceasta la rândul ei poate trimite către una sau mai multe reguli care să fie executate în succesiune, în cazul nostru urmând regula '​hangman'​. 
  
uso/laboratoare/laborator-06/make-simple-automation.1636453113.txt.gz · Last modified: 2021/11/09 12:18 by liza_elena.babu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0