POS/Lab 4 2016

Izvor: SI Wiki
Pređi na navigaciju Pređi na pretragu

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