lab1
!
Makefile
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) ... READMESadrž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.