-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
84 lines (63 loc) · 2.07 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
75
76
77
78
79
80
81
82
83
84
CC=gcc
CFLAGS=-g -Wall
LDLIBS = -lreadline
EXEC=tsh
TEST=tsh_test
BIN=bin/
SRC=src/
TARGET=target/
MAIN_DIR=main/
TEST_DIR=test/
CMD_DIR=cmd/
TYPES_DIR=types/
INCLUDE=$(SRC)include/
TEST_INCLUDE=$(SRC)test_include/
TSH_DIR=/tmp/.tsh
# TSH
MAIN_FILES=$(wildcard $(SRC)$(MAIN_DIR)*.c)
OBJS=$(notdir $(MAIN_FILES:.c=.o))
OBJS:=$(addprefix $(TARGET)$(MAIN_DIR), $(OBJS))
OBJS_NO_MAIN=$(filter-out $(TARGET)$(MAIN_DIR)main.o, $(OBJS))
# TEST
TEST_FILES=$(wildcard $(SRC)$(TEST_DIR)*.c)
TEST_OBJS=$(notdir $(TEST_FILES:.c=.o))
TEST_OBJS:=$(addprefix $(TARGET)$(TEST_DIR), $(TEST_OBJS))
# BIN
CMD_FILES=$(wildcard $(SRC)$(CMD_DIR)*.c)
BIN_FILES=$(notdir $(basename $(CMD_FILES)))
BIN_FILES:=$(addprefix $(BIN), $(BIN_FILES))
# TYPES
TYPES_INCLUDE=$(SRC)/types
TYPES_FILES=$(wildcard $(SRC)$(TYPES_DIR)*.c)
TYPES_OBJS=$(notdir $(TYPES_FILES:.c=.o))
TYPES_OBJS:=$(addprefix $(TARGET)$(TYPES_DIR), $(TYPES_OBJS))
# Prevent deletion of file
.PRECIOUS: $(TARGET)$(CMD_DIR)%.o
all: types $(EXEC) cmd $(TEST)
cmd: $(BIN_FILES)
@mkdir -p $(TSH_DIR)
@cp -r $(BIN) $(TSH_DIR)
types: $(TYPES_OBJS)
$(EXEC): $(OBJS) $(TYPES_OBJS)
@$(CC) -I $(INCLUDE) -I $(TYPES_INCLUDE) $(CFLAGS) -o $(EXEC) $^ $(LDLIBS)
$(TEST): $(OBJS_NO_MAIN) $(TEST_OBJS) $(TYPES_OBJS)
@$(CC) -I $(INCLUDE) -I $(TEST_INCLUDE) -I $(TYPES_INCLUDE) $(CFLAGS) -o $(TEST) $^
$(TARGET)$(MAIN_DIR)%.o : $(SRC)$(MAIN_DIR)%.c
@mkdir -p $(dir $@)
@$(CC) -I $(INCLUDE) -I $(TYPES_INCLUDE) -c $(CFLAGS) -o $@ $<
$(TARGET)$(TEST_DIR)%.o : $(SRC)$(TEST_DIR)%.c
@mkdir -p $(dir $@)
@$(CC) -I $(INCLUDE) -I $(TEST_INCLUDE) -I $(TYPES_INCLUDE) -c $(CFLAGS) -o $@ $<
$(TARGET)$(CMD_DIR)%.o : $(SRC)$(CMD_DIR)%.c
@mkdir -p $(dir $@)
@$(CC) -I $(INCLUDE) -I $(TYPES_INCLUDE) -c $(CFLAGS) -o $@ $<
$(BIN)% : $(OBJS_NO_MAIN) $(TARGET)$(CMD_DIR)%.o $(TYPES_OBJS)
@mkdir -p $(BIN)
@$(CC) -I $(INCLUDE) -I $(TYPES_INCLUDE) $(CFLAGS) -o $@ $^
$(TARGET)$(TYPES_DIR)%.o : $(SRC)$(TYPES_DIR)%.c
@mkdir -p $(dir $@)
@$(CC) -c $(CFLAGS) -o $@ $<
doc: $(MAIN_FILES) $(TYPE_FILES) $(CMD_FILES)
@doxygen Doxyfile
clean:
@rm -rf $(TARGET) $(EXEC) $(TEST) $(BIN) doc