-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmakefile
68 lines (53 loc) · 1.39 KB
/
makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
NAME = bayou
CC = gcc
FLAGS = -std=c99 -pedantic -g
FLAGS+= -Wall -Wno-unused-parameter -Wextra -Werror=vla -Werror
VALGRIND = --show-leak-kinds=all --track-origins=yes --leak-check=full
BIND = bin
OBJD = obj
SRCD = src
SUBD = sub
TESTD = tests
INCL = -I$(SRCD)
INCL+= -I$(SUBD)/testoasterror/src
FINAL = $(SRCD)/main.c
TESTS = $(TESTD)/main.c
TESTS+= $(SUBD)/testoasterror/src/testoasterror.c
SRCS = $(SRCD)/bayou.c
SRCS+= $(SRCD)/short.c
FINAL_OBJS:= $(patsubst %.c,$(OBJD)/%.o,$(FINAL))
SRCS_OBJS := $(patsubst %.c,$(OBJD)/%.o,$(SRCS))
TESTS_OBJS:= $(patsubst %.c,$(OBJD)/%.o,$(TESTS))
# aliases
.PHONY: final
final: $(BIND)/$(NAME)
tests: $(BIND)/tests
# generic compiling command
$(OBJD)/%.o: %.c
@echo "building object $@"
@mkdir -p $(@D)
@$(CC) $(INCL) $(FLAGS) -c -o $@ $<
# final executable
$(BIND)/$(NAME): $(SRCS_OBJS) $(FINAL_OBJS)
@echo "compiling executable $@"
@mkdir -p $(@D)
@$(CC) -o $@ $^ $(LINK)
run:
@cd $(BIND) && ./$(NAME)
# tests executable
$(BIND)/tests: $(SRCS_OBJS) $(TESTS_OBJS)
@echo "compiling tests"
@mkdir -p $(@D)
@$(CC) -o $@ $^ $(LINK)
check:
@cd $(BIND) && ./tests
# tools
leakgrind: $(BIND)/$(NAME)
@rm -f valgrind.log
@cd $(BIND) && valgrind $(VALGRIND) 2> ../valgrind.log ./$(NAME)
leakgrindcheck: $(BIND)/tests
@rm -f valgrind.log
@cd $(BIND) && valgrind $(VALGRIND) 2> ../valgrind.log ./tests
clean:
@echo "cleaning"
@rm -rf $(BIND) $(OBJD) valgrind.log