LAB1: Makefile


Tražene promjene raditi u grani lab1!

Makefile

U repozitoriju osur-primjeri zadani su primjeri, a među njima je i direktorij make/lab1-2024 u kojem se nalazi primjer koda kojeg treba koristiti u LAB1. Sadržaj tog direktorija staviti u direktorij lab1 unutar vašeg repozitorija, u granu lab1, tj. tamo gdje je Chapter_01_Startup (i ostali) od Benu treba biti direktorij lab1, a u lab1 odmah sadržaj (Makefile, main.c, ...) a ne dodatni poddirektorij.

Početni direktorij repozitorija u grani lab1 (nakon npr. cd ~/osur-lab && git checkout lab1 && ls -l):

Chapter_01_Startup
...
lab1    (ovo je dodano za lab1 u odnosu na master)
...
README
Sadržaj lab1:
izlaz
obrada
ulaz
Makefile
...

U tom primjeru kod je raspodijeljen u direktorijima, ali se trenutno sve prevodi korištenjem početnog Makefilea.

Zadatak za LAB1 je promijeniti način prevođenja tako da svaki diretkorij ima svoj Makefile koji prevodi datoteke s kodom samo iz tog direktorija, poziva Makefileove iz poddirektorija te izgrađuje objekt od svih. Npr. Makefile u direktoriju ulaz treba kompajlirati ulaz.c u ulaz.o, pozvati Makefileove u direktorjima datoteka, generator i tipkovnica te na kraju povezati sve objekte u npr. ulaz-obj.o. Ako je u direktoriju samo jedna datoteka .c, bez poddirektorija, datoteka .o (koja je potrebna u višim direktorjima) može imati isto ime kako i .c datoteka (npr. u ulaz/datoteka ne treba stvarati datoteka-obj.o već se može zvati kao i .c, tj. datoteka.o).

Pogledati organizaciju koda i zaglavlja, a da bi na predaji mogli riješiti zadatak ("dodaj novu/promijeni datoteku/direktorij..."). Ukratko, datoteke .h su istoimene datotekama .c u direktoriju. U datoteke .h staviti samo ono što .c ostvaruje i nudi višim slojevima, samo ono što treba biti vidljivo tamo. Sve ostalo postaviti u .c datoteke. Ako ima funkcija/struktura podataka potrebnih samo jednoj (toj) .c datoteci, onda ih označiti sa static.

Provjeriti da se u repozitoriju ne nađu nepotrebne datoteke (npr. .o, prog, direktorij build za ostale vježbe). Poželjno je u direktorij lab1 dodati .gitignore (preimenovati C.gitignore u .gitignore nakon dohvata), jer onaj u Benu pretpostavlja da će sve privremene datoteke biti samo u direktoriju build.

Pogledati primjeri s Makefileovima.