ПОС/Лаб 4 2016 — разлика између измена
м (→Поставка) |
мНема описа измене |
||
Ред 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. у 19: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