This repository has been archived by the owner on Sep 12, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
74 lines (52 loc) · 1.4 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
74
TARGET_EXEC ?= minishell
TARGET_EXEC_TESTS ?= glados
CC ?= gcc
BUILD_DIR := build
SRC_DIRS := src
SRCS := $(shell find $(SRC_DIRS) -name '*.c')
OBJS := $(SRCS:%=$(BUILD_DIR)/%.o)
DEPS := $(OBJS:.o=.d)
INC_DIRS := $(SRC_DIRS)
INC_FLAGS := $(addprefix -I,$(INC_DIRS))
CPPFLAGS := $(INC_FLAGS) -MMD -MP
CFLAGS := -Wall \
-Wextra \
-Wconversion \
-Wno-incompatible-pointer-types \
-O2 \
-std=c2x \
-pedantic
ifeq ($(DEBUG), 1)
CFLAGS += -ggdb
endif
LDFLAGS :=
$(TARGET_EXEC): $(BUILD_DIR)/$(TARGET_EXEC)
cp $(BUILD_DIR)/$(TARGET_EXEC) $(TARGET_EXEC)
$(BUILD_DIR)/$(TARGET_EXEC): $(OBJS)
$(CC) $(OBJS) -o $@ $(LDFLAGS)
$(TARGET_EXEC_TESTS): CFLAGS += -Wno-missing-variable-declarations -Wno-declaration-after-statement
$(TARGET_EXEC_TESTS): CPPFLAGS += -DUNIT_TESTS
$(TARGET_EXEC_TESTS): LDFLAGS += -lcriterion
$(TARGET_EXEC_TESTS): $(BUILD_DIR)/$(TARGET_EXEC_TESTS)
cp $(BUILD_DIR)/$(TARGET_EXEC_TESTS) $(TARGET_EXEC_TESTS)
$(BUILD_DIR)/$(TARGET_EXEC_TESTS): $(OBJS)
$(CC) $(OBJS) -o $@ $(LDFLAGS)
$(BUILD_DIR)/%.c.o: %.c
@mkdir -p $(dir $@)
$(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@
.PHONY: clean
clean:
rm -rf $(BUILD_DIR)
.PHONY: fclean
fclean: clean
rm -f $(TARGET_EXEC)
rm -f $(TARGET_EXEC_TESTS)
.PHONY: re
re: fclean
$(MAKE) $(TARGET_EXEC)
.PHONY: all
all: $(TARGET_EXEC)
.PHONY: run_tests
run_tests: $(TARGET_EXEC_TESTS)
./$(TARGET_EXEC_TESTS)
-include $(DEPS)