ПОС/Лаб 4 2016 — разлика између измена

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
(Dodato resenje prvog zadatka)
 
Ред 10: Ред 10:
Правила треба да уклоне непотребне зависности.
Правила треба да уклоне непотребне зависности.
Користити променљиве, '$@', '$<', '$^' и 'patsubst' где год има смисла.
Користити променљиве, '$@', '$<', '$^' и 'patsubst' где год има смисла.
(4) У 'makefile' додати акције 'clean' и 'all'.
(4) У 'makefile' додати акције 'clean' и 'all'.
'clean' треба да брише све фајлове који нису '.c' или '.h' или 'makefile' (потребно је уклонити и скривене фајлове који имају '~' на крају, а које генерише едитор)
'clean' треба да брише све фајлове који нису '.c' или '.h' или 'makefile' (потребно је уклонити и скривене фајлове који имају '~' на крају, а које генерише едитор)
'all' треба да уради поновно формирање свих зависних фајлова без обзира да ли су ажурирани или не  
'all' треба да уради поновно формирање свих зависних фајлова без обзира да ли су ажурирани или не  
(дакле, треба да се опет генеришу сви '.о' фајлови, као и сам програм)
(дакле, треба да се опет генеришу сви '.о' фајлови, као и сам програм)
Заштити 'clean' и 'all' акције тако да се увек извршавају.  
Заштити 'clean' и 'all' акције тако да се увек извршавају.


==== Решење ====
==== Решење ====

Верзија на датум 16. мај 2021. у 20:06

Група 3

Задатак 1

Поставка

(6) У фајл 'test/project/makefile' уписати правила за превођење кода датог у фолдерима 'src' и 'include'. У фолдеру 'obj' треба се нађу сви .о фајлови, У 'project' фолдеру треба да се налази извршни фајл под називом 'program'. Правила треба да уклоне непотребне зависности. Користити променљиве, '$@', '$<', '$^' и 'patsubst' где год има смисла.

(4) У 'makefile' додати акције 'clean' и 'all'. 'clean' треба да брише све фајлове који нису '.c' или '.h' или 'makefile' (потребно је уклонити и скривене фајлове који имају '~' на крају, а које генерише едитор) 'all' треба да уради поновно формирање свих зависних фајлова без обзира да ли су ажурирани или не (дакле, треба да се опет генеришу сви '.о' фајлови, као и сам програм) Заштити 'clean' и 'all' акције тако да се увек извршавају.

Решење

Једно од решења које има максимални број бодова:

# 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