-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMakefile
executable file
·74 lines (58 loc) · 1.63 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
69
70
71
72
73
# Makefile template
## BEGIN Project specific variables ##
# Compiler and options #
WARN=-Wall -Wpedantic
OPT=#-O2 # no opts for now
STD=-std=c99 -D_POSIX_C_SOURCE=200809L
CFLAGS=$(WARN) $(OPT) $(STD) -g
# project sources #
EXECNAME=bugworld
INCDIR=-I include
SRCDIR=src
SRCEXT=c
OBJEXT=o
BUILDDIR=build
BINDIR=bin
# test sources #
TESTDIR=test
TESTSRC=bugworld_test
TESTOBJ=$(BUILDDIR)/$(TESTSRC).$(OBJEXT)
TESTEXEC=$(BINDIR)/$(TESTSRC)
TESTDEPEND=$(OBJECTSNOMAIN)
# library information #
LMATH=-lm
LNCURSES=-lncurses
#LRT=-lrt
LDFLAGS=$(LNCURSES) $(LMATH) #$(LRT)
# misc #
RM=rm -f
PTHREAD=-pthread # use -pthread instead of -lpthread for proper macros
## END Project specific variables ##
TARGET=$(BINDIR)/$(EXECNAME)
SOURCES=$(shell find $(SRCDIR) -type f -name *.$(SRCEXT))
OBJECTS=$(patsubst $(SRCDIR)/%, $(BUILDDIR)/%, $(SOURCES:.$(SRCEXT)=.o))
OBJECTSNOMAIN=$(filter-out $(BUILDDIR)/main.$(OBJEXT), $(OBJECTS))
$(TARGET): $(OBJECTS)
@echo "Linking..."
@mkdir -p $(BINDIR)
@$(CC) $^ -o $(TARGET) $(LIB) $(LDFLAGS) $(PTHREAD)
$(BUILDDIR)/%.o: $(SRCDIR)/%.$(SRCEXT)
@mkdir -p $(BUILDDIR)
@echo "Compiling ($(CC)) $<..."
@$(CC) $(CFLAGS) $(PTHREAD) $(INCDIR) -c -o $@ $<
.PHONY: test all clean run runtest
test: $(TARGET)
@echo "Building tests..."
@$(CC) $(CFLAGS) $(PTHREAD) -c -o $(TESTOBJ) $(TESTDIR)/$(TESTSRC).$(SRCEXT) $(INCDIR)
@$(CC) $(CFLAGS) $(PTHREAD) -o $(TESTEXEC) $(TESTDIR)/$(TESTSRC).$(SRCEXT) $(TESTDEPEND) $(INCDIR) $(LDFLAGS)
all: clean $(TARGET) test
@echo "Done!"
clean:
@echo "Cleaning...";
@$(RM) -r $(BUILDDIR) $(BINDIR)
run:
@echo "Running..."
@./$(TARGET)
runtest:
@echo "Running tests..."
@./$(TESTEXEC)