9 months ago |
10 |
1 |
# Basic Makefile for a C program with multiple source files and header dependencies | ||
2 |
|||||
3 |
CC = gcc | ||||
Yesterday |
4 |
CDFLAGS = -Wall -Wextra -std=c17 -I include | |||
5 |
CFLAGS = $(CDFLAGS) -g -O0 -MMD -MP | ||||
6 |
BUILD = build | ||||
9 months ago |
7 |
EXAMPLES_SRC = $(wildcard examples/*.c) | |||
Yesterday |
8 |
EXAMPLES_OBJ = $(patsubst %.c, $(BUILD)/%.o, $(EXAMPLES_SRC)) | |||
9 months ago |
9 |
EXAMPLES = $(patsubst examples/%.c, %, $(wildcard examples/*.c)) | |||
10 |
LIB_SRC = $(wildcard coroutine/*.c) | ||||
Yesterday |
11 |
LIB_OBJ = $(patsubst %.c, $(BUILD)/%.o, $(LIB_SRC)) | |||
9 months ago |
12 |
OBJ = $(EXAMPLES_OBJ) $(LIB_OBJ) | |||
9 months ago |
10 |
13 |
DEP = $(OBJ:.o=.d) | ||
14 |
|||||
Yesterday |
15 |
# Have $(OBJ) as a dependenacy for $(ALL) to avoid them being treated as intermediates which are deleted after build | |||
16 |
all: $(EXAMPLES) $(OBJ) | ||||
9 months ago |
10 |
17 |
|||
Yesterday |
18 |
build: | |||
19 |
mkdir $(BUILD) | ||||
20 |
|||||
21 |
%: $(BUILD)/examples/%.o $(LIB_OBJ) | ||||
9 months ago |
10 |
22 |
$(CC) $(CFLAGS) -o $@ $^ | ||
23 |
|||||
Yesterday |
24 |
$(BUILD)/%.o: %.c build | |||
25 |
$(CC) $(CFLAGS) -c $< -o $@ -MF $(@:.o=.d) | ||||
9 months ago |
10 |
26 |
|||
27 |
-include $(DEP) | ||||
28 |
|||||
29 |
clean: | ||||
Yesterday |
30 |
echo Doing clean | |||
9 months ago |
31 |
rm -f $(OBJ) $(DEP) $(EXAMPLES) | |||
9 months ago |
10 |
32 |
|||
33 |
.PHONY: all clean | ||||
34 |