Differences

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

Link to this comparison view

uso:laboratoare:new:04-appdev:need-to-know [2019/10/09 12:20]
liza_elena.babu [Următorii pași în lumea git-ului]
uso:laboratoare:new:04-appdev:need-to-know [2019/10/24 11:23] (current)
adrian.zatreanu [Automatizarea procesului de compilare - Makefile]
Line 44: Line 44:
  
 Se observă faptul că pe lângă bibliotecile standard ''​stdio''​ și ''​stdlib'',​ ''​main.c''​ mai are nevoie de câteva resurse externe și Se observă faptul că pe lângă bibliotecile standard ''​stdio''​ și ''​stdlib'',​ ''​main.c''​ mai are nevoie de câteva resurse externe și
-anume ''​a.h''​ și ''​b.h''​. În aceste 2 fișiere găsim ​definiții de **funcții** și/sau **variable** pe care vrem să le folosim în ''​main.c''​.+anume ''​a.h''​ și ''​b.h''​. În aceste 2 fișiere găsim ​declarații de **funcții** și/sau **variable** pe care vrem să le folosim în ''​main.c''​.
  
 **a.h** **a.h**
Line 68: Line 68:
 </​code>​ </​code>​
  
-Fiecare fișier header vine asociat cu un fișier cod sursă în care sunt declarate ​toate funcțiile/​variabilele ​definite ​în headere.+Fiecare fișier header vine asociat cu un fișier cod sursă în care sunt definite ​toate funcțiile/​variabilele ​declarate ​în headere.
 Fișierele cod sursă includ toate headerele asociate. Spre exemplu, ''​a.c''​ include fișierul ''​a.h'',​ la fel și pentru ''​b.c''​. Fișierele cod sursă includ toate headerele asociate. Spre exemplu, ''​a.c''​ include fișierul ''​a.h'',​ la fel și pentru ''​b.c''​.
 Trebuie reținut faptul că pentru a putea avea un program funcțional,​ trebuie să fie compilate toate fișierele cod sursă. Trebuie reținut faptul că pentru a putea avea un program funcțional,​ trebuie să fie compilate toate fișierele cod sursă.
Line 90: Line 90:
  
 <note warning> <note warning>
-**NU** includeți niciodată ​declarații în fișiere header. Fișierele header sunt **doar** pentru ​definiții, fișierele cod sursă sunt cele+**NU** includeți niciodată ​definiții în fișiere header. Fișierele header sunt **doar** pentru ​declarații, fișierele cod sursă sunt cele
 care trebuie să conțină implementarea. care trebuie să conțină implementarea.
 </​note>​ </​note>​
Line 96: Line 96:
   - Rulați programul ''​main''​ și asigurați-vă că rularea lui se termină cu succes.   - Rulați programul ''​main''​ și asigurați-vă că rularea lui se termină cu succes.
  - Urmăriți pașii de mai jos:  - Urmăriți pașii de mai jos:
-Definiți o funcție cu numele ''​bad''​ fără parametri care nu întoarce nimic în fișierul ''​a.h''​ (Atenție: doar definiția!).+Declarați o funcție cu numele ''​bad''​ fără parametri care nu întoarce nimicîn fișierul ''​a.h''​ (Atenție: doar declarația!).
  - În fișierul ''​main.c'',​ înainte de linia ''​return 0'',​ apelați această funcție (''​bad()''​).  - În fișierul ''​main.c'',​ înainte de linia ''​return 0'',​ apelați această funcție (''​bad()''​).
  - Compilați din nou acest program (cu aceeași comandă pe care ați văzut-o mai sus). Ce s-a întâmplat?​ Care este motivul? Discutați cu asistentul.  - Compilați din nou acest program (cu aceeași comandă pe care ați văzut-o mai sus). Ce s-a întâmplat?​ Care este motivul? Discutați cu asistentul.
Line 102: Line 102:
  
 <​note>​ <​note>​
-De fiecare dată când vreți să apelați o funcție ​definită într-un fișier header, trebuie să existe o declarație / implementare a ei într-un ​+De fiecare dată când vreți să apelați o funcție ​declarată într-un fișier header, trebuie să existe o definiție / implementare a ei într-un ​
 fișier cod sursă, altfel programul nu este complet și nici corect! fișier cod sursă, altfel programul nu este complet și nici corect!
 </​note>​ </​note>​
Line 111: Line 111:
 programelor C folosesc funcții din aceastea bibliotecă și s-a hotărât să fie linkată întotdeauna,​ însă aceasta nu este singura bibliotecă programelor C folosesc funcții din aceastea bibliotecă și s-a hotărât să fie linkată întotdeauna,​ însă aceasta nu este singura bibliotecă
 externă pe care putem să o folosim. Putem să creăm noi o bibliotecă și să o linkăm programului nostru sau să folosim o bibliotecă deja  externă pe care putem să o folosim. Putem să creăm noi o bibliotecă și să o linkăm programului nostru sau să folosim o bibliotecă deja 
-existentă cum ar fi biblioteca ce conține funcții matematice''​math''​.+existentă cum ar fi biblioteca ce conține funcții matematice ''​math''​.
  
 Pentru a folosi biblioteca ''​math''​ în programul nostru, trebuie să facem 2 lucruri. Pentru a folosi biblioteca ''​math''​ în programul nostru, trebuie să facem 2 lucruri.
- - Să includem headerul ''​math.h''​ în program, pentru a putea preciză că se vor folosi funcții ​definite ​acolo.+ - Să includem headerul ''​math.h''​ în program, pentru a putea preciză că se vor folosi funcții ​declarate ​acolo.
  - În momentul în care compilăm programul nostru, trebuie să-i precizăm compilatorului că noi folosim funcții din biblioteca ''​math.h''​ și că vrem ca binarul nostru să fie linkat cu biblioteca ''​math''​.  - În momentul în care compilăm programul nostru, trebuie să-i precizăm compilatorului că noi folosim funcții din biblioteca ''​math.h''​ și că vrem ca binarul nostru să fie linkat cu biblioteca ''​math''​.
  
Line 135: Line 135:
  
 int main(void) { int main(void) {
- int x;+ float x;
  printf("​Give me a number: ");  printf("​Give me a number: ");
  scanf("​%f",​ &x);  scanf("​%f",​ &x);
Line 144: Line 144:
  
 <​note>​ <​note>​
-Observați faptul că am include ​biblioteca ''​math.h''​ pentru a putea folosi funcția ''​sqrt''​ pentru calcularea radicalului unui număr.+Observați faptul că am inclus ​biblioteca ''​math.h''​ pentru a putea folosi funcția ''​sqrt''​ pentru calcularea radicalului unui număr.
 </​note>​ </​note>​
  
Line 169: Line 169:
 student@uso:​~/​uso-lab/​04-appdev/​support/​need-to-know/​using-math$ ./main student@uso:​~/​uso-lab/​04-appdev/​support/​need-to-know/​using-math$ ./main
 Give me a number: 1234 Give me a number: 1234
-The square root for it is: 33925.795731+The square root for it is: 35.128336
 </​code>​ </​code>​
  
Line 187: Line 187:
  
 <​code>​ <​code>​
-build:+main:
  gcc main.c a.c b.c -o main  gcc main.c a.c b.c -o main
 clean: clean:
Line 193: Line 193:
 </​code>​ </​code>​
  
-Fișierul Makefile de mai sus conține 2 **reguli**: ''​build''​ și ''​clean''​. Regula ​build va fi folosită pentru a compila programul, pe +Fișierul Makefile de mai sus conține 2 **reguli**: ''​main''​ și ''​clean''​. Regula ​main va fi folosită pentru a compila programul, pe 
 când regula ''​clean''​ va fi folosită pentru a șterge toate fișierele generate în urma compilării. când regula ''​clean''​ va fi folosită pentru a șterge toate fișierele generate în urma compilării.
  
Line 199: Line 199:
 Atenție! Regulile în Makefile trebuie scrise la stânga de tot (fără spații la începutul rândului), iar comenzile aferente fiecărei reguli Atenție! Regulile în Makefile trebuie scrise la stânga de tot (fără spații la începutul rândului), iar comenzile aferente fiecărei reguli
 trebuie să se afle pe linia următoare, iar linia să înceapă cu <​TAB>,​ **nu** spații. trebuie să se afle pe linia următoare, iar linia să înceapă cu <​TAB>,​ **nu** spații.
-<​note>​+</note>
  
  - Creați fișierul Makefile de mai sus la calea ''​~/​uso-lab/​04-appdev/​support/​need-to-know/''​. Denumiți fișierul ''​Makefile''​.  - Creați fișierul Makefile de mai sus la calea ''​~/​uso-lab/​04-appdev/​support/​need-to-know/''​. Denumiți fișierul ''​Makefile''​.
  
-Pentru a rula regula ''​build''​ trebuie să scriem comanda ''​make ​build''​.+Pentru a rula regula ''​main''​ trebuie să scriem comanda ''​make ​main''​.
  
 <code bash> <code bash>
Line 209: Line 209:
 student@uso:​~/​uso-lab/​04-appdev/​support/​need-to-know$ ls student@uso:​~/​uso-lab/​04-appdev/​support/​need-to-know$ ls
 a.c     ​a.h ​    ​b.c ​    ​b.h ​    ​main.c ​   Makefile a.c     ​a.h ​    ​b.c ​    ​b.h ​    ​main.c ​   Makefile
-student@uso:​~/​uso-lab/​04-appdev/​support/​need-to-know$ make build+student@uso:​~/​uso-lab/​04-appdev/​support/​need-to-know$ make main
 gcc main.c a.c b.c -o main gcc main.c a.c b.c -o main
 student@uso:​~/​uso-lab/​04-appdev/​support/​need-to-know$ ls student@uso:​~/​uso-lab/​04-appdev/​support/​need-to-know$ ls
Line 217: Line 217:
 Vedem acum că a fost creat executabilul ''​main''​ pe care putem să-l rulăm în continuare. Vedem acum că a fost creat executabilul ''​main''​ pe care putem să-l rulăm în continuare.
  
- - Rulați ​exetuabilul ​''​main''​ și asigurați-vă că funcționează.+ - Rulați ​executabilul ​''​main''​ și asigurați-vă că funcționează.
  - Adăugați o regulă numită ''​run''​ în Makefile care să aibă drept comandă asociată chiar comanda cu care rulăm programul ''​main''​. Nu treceți mai departe până când partea aceasta nu este clară.  - Adăugați o regulă numită ''​run''​ în Makefile care să aibă drept comandă asociată chiar comanda cu care rulăm programul ''​main''​. Nu treceți mai departe până când partea aceasta nu este clară.
  - Ștergeți executabilul ''​main''​ folosind una dintre regulile definite în Makefile.  - Ștergeți executabilul ''​main''​ folosind una dintre regulile definite în Makefile.
  
 Dacă se va rula în terminal doar comanda ''​make''​ (fără a fi urmată de vreun argument), atunci se va executa prima regulă găsită în Makefile, ​ Dacă se va rula în terminal doar comanda ''​make''​ (fără a fi urmată de vreun argument), atunci se va executa prima regulă găsită în Makefile, ​
-în cazul acesta tot regula ''​build''​.+în cazul acesta tot regula ''​main''​.
  
  
Line 235: Line 235:
 </​code>​ </​code>​
  
- - La calea ''​~/​uso-labs/​04-appdev/​support/​basics/''​ creați un Makefile care să conțină regulile ''​build'',​ ''​run''​ și ''​clean''​. Nu treceți mai departe până când asistentul confirmă că este în regulă. ​+ - La calea ''​~/​uso-lab/​04-appdev/​support/​need-to-know/''​ creați un Makefile care să conțină regulile ''​main'',​ ''​run''​ și ''​clean''​. Nu treceți mai departe până când asistentul confirmă că este în regulă. ​
  
  
uso/laboratoare/new/04-appdev/need-to-know.1570612839.txt.gz · Last modified: 2019/10/09 12:20 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