POS/Lab 4 2016
Grupa 3
Zadatak 1
Postavka
(6) U fajl test/project/makefile upisati pravila za prevođenje koda datog u folderima src i include. U folderu obj treba se nađu svi .o fajlovi, U project folderu treba da se nalazi izvršni fajl pod nazivom program. Pravila treba da uklone nepotrebne zavisnosti. Koristiti promenljive, $@, $<, $^ i patsubst gde god ima smisla.
(4) U makefile dodati akcije clean i all. clean treba da briše sve fajlove koji nisu .c ili .h ili makefile (potrebno je ukloniti i skrivene fajlove koji imaju ~ na kraju, a koje generiše editor) all treba da uradi ponovno formiranje svih zavisnih fajlova bez obzira da li su ažurirani ili ne (dakle, treba da se opet generišu svi .o fajlovi, kao i sam program) Zaštiti clean i all akcije tako da se uvek izvršavaju.
Rešenje
Jedno od rešenja koje ima maksimalni broj bodova:
# makefile
CC = gcc
OBJDIR = ./obj
SRCDIR = ./src
IDIR = ./src/include
CFLAGS = -w -I$(IDIR)
PROGRAM = ../program
SRC = $(wildcard $(SRCDIR)/*.c)
OBJ = $(patsubst $(SRCDIR)/%.c,$(OBJDIR)/%.o,$(SRC))
DEP = $(patsubst $(SRCDIR)/%.c,$(SRCDIR)/%.d,$(SRC))
$(PROGRAM): $(OBJ)
$(CC) -o $@ $^
$(OBJDIR)/%.o: $(SRCDIR)/%.c | proveridir
$(CC) -o $@ -c $< $(CFLAGS)
$(SRCDIR)/%.d: $(SRCDIR)/%.c
$(CC) -MM $< $(CFLAGS) > $@
include $(DEP)
clean:
rm -rf obj
rm -f $(PROGRAM)
rm -f $(SRCDIR)/*.d
rm -f *~
all: clean $(PROGRAM)
proveridir:
[ -d $(OBJDIR) ] || mkdir -p $(OBJDIR)
.PHONY:
proveridir
clean
all
Zadatak 2
(4) Koristeći gdv, napisati sledeće komande u fajl test/gdb/gdb.txt:
- Stvoriti izvršni program od koda datog u folderima src i include
- Postaviti breakpoint na liniju 14 u main.c fajlu
a = dohvFibonaciBrojeve(n);
- Pokrenuti program sa parametrom 10
- Ući u funkciju dohvFibonaciBrojeve i pročitati vrednost fib[9] kada program stigne do linije 18:
return (int*)fib;
- Skočiti na liniju 23 u fajlu main.c:
return 0;
- Završiti program
- Prikazati sve breakpoint-ove
- Ukloniti sve breakpoint-ove
- Izaći iz dibagera