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