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)