Differences

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

Link to this comparison view

uso:laboratoare:new:04-appdev:basics [2019/10/02 13:37]
liza_elena.babu
uso:laboratoare:new:04-appdev:basics [2019/10/27 14:44] (current)
elena.stoican [Compilarea unui fișier C]
Line 6: Line 6:
 ==== Scrierea unui program C ==== ==== Scrierea unui program C ====
  
-La calea ''​~/​uso.git/labs/​04-appdev/​support/​basics/​simple.c''​ un program simplu C care afișează bine-cunoscutul mesaj "​Hello,​ World!"​.+La calea ''​~/​uso-lab/​04-appdev/​support/​basics/​simple.c'' ​se află un program simplu C care afișează bine-cunoscutul mesaj "​Hello,​ World!"​.
  
 <​note>​ <​note>​
Line 22: Line 22:
 </​code>​ </​code>​
  
-==== Compilare folosind reguli din Makefile ​====+==== Compilarea unui fișier C ====
  
-Tot acolo găsiți un fișier ​Makefile:+Cel mai folosit compilator de C folosit pe Ubuntu este ''​gcc''​. Acesta va fi folosit șde noi În cardrul laboratorului să compilăm fișiere scrise în limbajul C. 
 +Pentru a compila ​un fișier, rulăm comanda ''​gcc''​ urmată de numele fișierului pe care vrem să-l compilăm. ​
  
 <code bash> <code bash>
-simple: +student@uso:~/uso-lab/​04-appdev/​support/​basics/​$ gcc simple.c 
- gcc -Wall simple.c -simple+student@uso:​~/​uso-lab/​04-appdev/​support/​basics/​$ ls 
 +a.out   simple.c 
 +student@uso:​~/​uso-lab/​04-appdev/​support/​basics/​$ file a.out 
 +a.out: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=c5ad78cfc1de12b9bb6829207cececb990b3e987,​ not stripped 
 +</​code>​
  
-clean+Outputul produs de această comandă este un fișier executabil cu numele ''​a.out''​. Comanda ''​file''​ ne ajută să inspectăm tipul fișierului dat ca argument. În acest caz, ne spune că fișierul ''​a.out''​ 
- rm simple+este de tip ELF pe 64 de biți. 
 + 
 +  - De multe ori nu vrem ca executabilul rezultat să se numească a.out, ci vrem să aibă un nume mai intuitiv, spre exemplu ''​simple''​. Compilați programul ''​simple.c''​ astfel încât fișierul rezultat să se numească ''​simple''​ (hintman gcc, căutați după cuvântul cheie ''​outfile''​). 
 +  - Folosind comanda ''​file'',​ verificați că fișierul ''​simple''​ este într-adevăr un fișier executabil. 
 +   
 +==== Primii pași în lumea git-ului ==== 
 + 
 +Așa cum a fost precizat și la secțiunea ''​Concepte'',​ **git** ne ajută la versionarea codului. Versionarea codului este un pas 
 +foarte important în dezvoltarea aplicațiilor. Atunci când lucrăm la un proiect mai mare sau suntem mai mulți oameni care lucrăm 
 +la un proiect, este important să păstrăm o ordine în cod. Spre exemplu, ni se poate întâmpla să ne apucăm să implementăm un nou 
 +feature al aplicației și să modificăm codul suficient de mult încât să stricăm ceea ce aveam înainte. În această situație, vrem  
 +să avem o modalitate prin care să revenim la o versiune anterioară a codului. Un alt exemplu care demonstrează nevoia de a folosi 
 +o modalitate de versionare este dat de situația în care 2 sau mai mulți oameni lucrează la același proiect, dezvoltă două  
 +funcționalități diferite și nu vor să aibă probleme atunci când vor imbina cele 2 funcționalități în produsul mare. 
 + 
 +Vom trece prin exemplele de mai sus în secțiunile următoare. Acum, ne vom concentra pe inițializarea proiectului. 
 + 
 +  - Înainte de toate, intrați pe [[https://​github.com|Github]] sau pe [[https://​bitbucket.org/​|Bitbucket]] și creați-vă un cont. Vom folosi mai târziu acest cont pentru a ține repository-urile pentru proiectele la care lucrăm.  
 + 
 +Pentru a putea versiona codul pe care îl scriem, trebuie întâi și întâi să avem un loc în care să scriem codul. Ne reamintim din  
 +laboratoarele anterioare cum se creează un director în Linux. Să presupunem că pornim din directorul ''​home''​ al uitlizatorului 
 +''​student''​. Dacă nu vă aflați acolo, rulați comanda ''​cd ~''​. 
 + 
 +<code bash> 
 +student@uso:​~$ mkdir my-awesome-project 
 +student@uso:​~$ cd my-awesome-project 
 +student@uso:​~/​my-awesome-project$
 </​code>​ </​code>​
  
-  - Folosind regulile din Makefilecompilați fișierul ''​simple.c''​ și asigurați-vă că această acțiune s-a terminat cu succes (hint: verificați existența fișierului generat ​''​simple''​). +În acest momentavem directorul în care vom lucra la proiectul nostruPentru a preciza sistemului ​că vrem să folosim ​''​git''​ 
-  - Faceți orice modificare asupra fișierului ​''​simple.c'' ​și compilați din nou fișierul. +pentru versionare, trebuie să dăm comanda ​''​git init''​. Această comandă creează un **repository local** ​nou în care vor fi 
-  - Ștergeți fișierul ''​simple''​ după ce acesta a fost generatVerificați că el nu mai există în sistem.+ținute toate datele legate de proiectVom vorbi despre **repository-uri remote** la secțiunile următoare.
  
-Acum, fișierul Makefile va executa orice regula de fiecare dată când acest lucru este solicitat, indiferent +<code bash> 
-dacă fișierele implicate au fost modificate sau nu. Putem (și vrem) să aducem o îmbunătățire în acest sens. +student@uso:​~/​my-awesome-project$ git init 
-Aceasta constă în adăugarea de **dependențe** în acest fișier.+Initialized empty Git repository in /​home/​student/​my-awesome-project/​.git/ 
 +student@uso:​~/​my-awesome-project$  
 +</​code>​
  
-Mai jos este un exemplu ​de Makefile (găsit la calea ''​~/uso.git/labs/04-appdev/​support/​demo/​Makefile''​) care +Dacă această comandă s-a executat cu succes, avem în acest moment ​un repository ​de ''​git''​ în directorul ''​my-awesome-project''​. Dacă dăm comanda 
-conține dependențe:​+''​git status''​ putem afla foarte ușor ce fișiere am modificat de la ultima actualizare a repository-ului.
  
 <code bash> <code bash>
-rule1print.c +student@uso:~/​my-awesome-project$ git status 
- gcc -Wall print.c ​-o print+# On branch master 
 +
 +# Initial commit 
 +
 +nothing to commit (create/​copy files and use "git add" to track) 
 +student@uso:​~/​my-awesome-project$  
 +</​code>​
  
-clean+Dat fiind faptul că nu am create/​șters/​modificat niciun fișier din directorul ''​my-awesome-project'',​ comanda ''​git status''​ ne spune că nu avem  
- rm print+nicio schimbare pe care să o "​comitem",​ adică nu avem nicio schimbare în directorul curent pe care ar trebui să o anunțăm. 
 + 
 +=== README și .gitignore === 
 + 
 +Uzual, orice proiect vine atașat cu 2 fișiere ''​README''​ și un fișier ''​.gitignore''​. Fișierul ''​README''​ conține informații despre cum este structurat 
 +proiectul, despre cum se folosește, practic conține orice are nevoie pentru a putea ajuta pe cineva (care nu a lucrat la proiect). Fișierul ''​.gitignore''​ 
 +este fișierul care îi spune utilitarului ''​git''​ ce fișiere să ignore atunci când cineva adaugă fișiere la repository. Spre exemplu, fișierele binare 
 +nu trebuie adăugate niciodată în repository deoarece este **foarte**, atenție **foarte**, probabil ca un program compilat pe un sistem să nu fie compatibil 
 +pe un altul. 
 + 
 +Primul pas pe care trebuie să-l facem după ce am inițializat repository-ul proiectului nostru este să adăugăm un fișier README, care va fi actualizat pe  
 +parcursul dezvoltării și un fișier ascuns cu numele ''​.gitignore''​. 
 + 
 +<code bash> 
 +student@uso:~/​my-awesome-project$ echo "​Initial content"​ > README # Scrie textul ''​Initial content''​ în fișierul ''​README''​. Fișierul este creat dacă nu exista deja. 
 +student@uso:​~/​my-awesome-project$ echo "​main"​ >  .gitignore # Creează fișierul .gitignore cu conținutul ''​main''​. 
 +student@uso:​~/​my-awesome-project$ git status 
 +# On branch master 
 +
 +# Initial commit 
 +
 +# Untracked files: 
 +#   (use "git add <​file>​..."​ to include in what will be committed) 
 +
 +#​ .gitignore 
 +# README 
 +nothing added to commit but untracked files present (use "git add" to track)
 </​code>​ </​code>​
  
-Regula ​''​rule1'' ​are dependența ​''​print.c''​. ​Aceasta semnifică faptul că la rularea comenzii ​''​make rule1''​ +Comanda ​''​git status'' ​ne arată că au fost modificate cele 2 fișiere, dar că sunt ''​untracked''​, adică nu au fost adăugate (încă în repository)Pentru a le adăuga, 
-se va executa regula ​''​rule1'' ​doar dacă fișierul ''​print.c'' ​a fost modificat de ultima oară când a fost +trebuie să facem 2 pași. Prima dată, le adăugam în setul de fișiere ​''​tracked''​. Pentru a face asta folosim comanda ​''​git add'' ​urmată de fișierele pe care vreți să 
-rulată aceasta regulă.+le adăugați, în cazul acesta ''​README''​ și ''​.gitignore''​.
  
-  - Adăugați dependențe în fișierul Makefile de la calea ''​~/uso.git/labs/04-appdev/​support/​basics/Makefile'' ​astfel încât ​fișierul ''​simple.c''​ să nu fie compilat de fiecare dată, ci doar după ce au fost produse ​modificări ​asupra luiPentru verificare, rulați comanda ​''​make simple''​ de 2 ori consecutivprima dată ar trebui să execute comanda de compilare ​(''​gcc ..''​), iar doua oară trebuie să vedețmesajul ​''​make: Nothing to be done for `simple`''​. +<code bash> 
-  - Modificați din nou fișierul ​''​simple.c''​ și compilați folosind ​regula din MakefileObservați că regula s-a executat de data această și că fișierul ​''​simple'' ​a fost generat. +student@uso:​~/my-awesome-project$ git add README .gitignore 
-  - Ștergeți fișierul generat ​folosind, desigur, regula ​''​clean'' ​din Makefile.+student@uso:~/my-awesome-project$ git status 
 +# On branch master 
 +
 +# Initial commit 
 +
 +# Changes to be committed:​ 
 +#   (use "git rm --cached <​file>​..."​ to unstage) 
 +
 +# new file:   ​.gitignore 
 +# new file:   ​README 
 +
 +</code> 
 + 
 +În acest moment ​''​git''​ știe de fișierele ''​README''​ și ''​.gitignore''​. Vedem acest lucru cu ajutorul comenzii ''​git status''​. Al doilea pas este să comitem schimbările. 
 +Acest lucru se face cu ajutorul comenzii ''​git commit''​ alături de argumentul ''​-m <​mesaj>''​. Mesajul este o descriere a commit-ului,​ descrie ​ce modificări ​au fost 
 +aduse odată cu aceasta versiune nouă de cod. ''​git commit'' ​va lua toate fișierele adăugate la pasul anterior, le va marca pe toate cu același mesaj de commit și le va  
 +submite în repository-ul local. 
 + 
 +<code bash> 
 +student@uso:​~/​my-awesome-project$ git commit -m "​Initial commit"​ 
 +[master (root-commit) 64bccb0] Initial commit 
 + ​Committer:​ student <​student@uso>​ 
 + 
 + files changed2 insertions(+) 
 + ​create mode 100644 .gitignore 
 + ​create mode 100644 README 
 +student@uso:​~/​my-awesome-project$ git status 
 +# On branch master 
 +nothing to commit, working directory clean 
 +</​code>​ 
 + 
 +La o nouă rulare a comenzii ​''​git status'' ​vedem că schimbările au fost efectuate cu succes. Pentru ​vedea istoricul commiturilor 
 +făcute pentru acest repository rulăm comanda ''​git log''​. Acum trebuie să vedem că a fost efectuat un singur commit de-a lungul timpului 
 +șanume cel cu identificatorul ​''​64bccb03c2f3a8e76730582676bd944902a0c1eb''​. ​Acest șir de caractere în hexazecimal este generat aleator și este unic pentru fiecare commit, ajutându-ne astfel să identificăm commit-urile în cazul în care ar exista mai multe cu același nume. 
 + 
 +<code bash> 
 +student@uso:​~/​my-awesome-project$ git log 
 +commit 64bccb03c2f3a8e76730582676bd944902a0c1eb 
 +Author: student <​student@uso>​ 
 +Date:   Mon Oct 7 15:49:20 2019 +0300 
 + 
 +    Initial commit 
 +</​code>​ 
 + 
 +  - Creați un program C cu numele ​''​main.c'' ​în directorul ''​~/​my-awesome-project/''​ care să afișeze mesajul "​Hello,​ World!"​. 
 +  - Verificați faptul că ''​git''​ vede această schimbare ​folosind ​comanda ''​git status''​Ar trebui să vedeți următorul output: 
 +  <code bash> 
 +  # On branch master 
 +  # 
 +  # Initial commit 
 +  # 
 +  # Untracked files: 
 +  #   (use "git add <​file>​..."​ to include in what will be committed) 
 +  # 
 +  # main.c 
 +  </​code>​ 
 +  ​Comiteți noile schimbări și asigurați-vă ​că totul este în regulă. Nu treceți mai departe dacă vreo comandă pe care ați dat-o nu funcționează. La final, ​''​git status'' ​nu ar trebui să mai găsească niciun fișier ca '​tracked'​Verificați folosind ''​git log'' ​sau chemând asistentul
  
-==== Primii pași în lumea git-ului ==== 
  
-Așa cum a fost precizat și la secțiunea ''​Concepte'',​ **git** ne ajută la versionarea codului. ​ 
uso/laboratoare/new/04-appdev/basics.1570012638.txt.gz · Last modified: 2019/10/02 13:37 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