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

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
мНема описа измене
Ред 5: Ред 5:
=== Задатак 1 ===
=== Задатак 1 ===
==== Поставка ====
==== Поставка ====
(6) У фајл 'test/project/makefile' уписати правила за превођење кода датог у фолдерима 'src' и 'include'.  
(6) У фајл ''test/project/makefile'' уписати правила за превођење кода датог у фолдерима ''src'' и ''include''.  
У фолдеру 'obj' треба се нађу сви .о фајлови,  
У фолдеру ''obj'' треба се нађу сви '''' фајлови,  
У 'project' фолдеру треба да се налази извршни фајл под називом 'program'.  
У ''project'' фолдеру треба да се налази извршни фајл под називом ''program''.  
Правила треба да уклоне непотребне зависности.
Правила треба да уклоне непотребне зависности.
Користити променљиве, '$@', '$<', '$^' и '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:08

Група 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