main
1SRCDIR := src/
2OBJDIR := obj/
3BINDIR := bin/
4
5PROGRAM := practice
6EXE := $(BINDIR)$(PROGRAM)
7
8C_FILES := $(wildcard *.c) $(wildcard */*.c)
9OBJS := $(patsubst src/%.c, obj/%.o, $(C_FILES))
10CC := gcc
11CFLAGS := -Wall -pedantic
12LDFLAGS :=
13
14all: init $(EXE)
15
16$(EXE): .depend $(OBJS)
17 $(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) -o $(EXE)
18
19depend: .depend
20
21.depend: cmd = gcc -MM -MF depend $(var); cat depend >> .depend;
22.depend:
23 @echo "Generating dependencies..."
24 @$(foreach var, $(C_FILES), $(cmd))
25 @rm -f depend
26
27-include .depend
28
29$(OBJDIR)%.o: $(SRCDIR)%.c
30 $(CC) $(CFLAGS) -c $< -o $@
31
32$(SRCDIR)/%: %.c
33 $(CC) $(CFLAGS) -o $@ $<
34
35clean:
36 @echo 'cleaning...'
37 @rm -fr *.o *.out .depend $(BINDIR) $(OBJDIR)
38
39init: clean
40 @echo 'initializing...'
41 @mkdir bin obj
42
43run: all
44 $(EXE)
45
46.PHONY: clean init depend
47
48list:
49 @echo $(C_FILES)