-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
115 lines (79 loc) · 3.49 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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#~ WordFormable Makefile ~#
### Definitions Section ###
# Name of the executable to create
EXECUTABLE_1 = WordFormablePartials
EXECUTABLE_2 = WordFormableTable
EXECUTABLE_3 = WordFormablePowerString
EXECUTABLE_4 = WordFormablePowerVInts
EXECUTABLE_5 = WordFormableQueueSearch
EXECUTABLE_6 = WordFormableBinarySearch
SOURCE_DIR = src
OBJECT_DIR = build
# The command to run for the C++ compiler (here used for C) and linker
CC = gcc
# Basic compiler arguments
CFLAGS = -g -c -Wall
# Basic linker arguments
LDFLAGS = -g
DEPENDENT_MAIN = main.c
INDEPENDENT_FILES:= $(filter-out $(SOURCE_DIR)/$(DEPENDENT_MAIN), $(wildcard $(SOURCE_DIR)/*.c))
INDEPENDENT_OBJ:= $(patsubst $(SOURCE_DIR)/%.c, $(OBJECT_DIR)/%.o, $(INDEPENDENT_FILES))
METHOD_1_FLAG=PARTIALS
METHOD_2_FLAG=TABLE
METHOD_3_FLAG=POWERSTRING
METHOD_4_FLAG=POWERVINTS
METHOD_5_FLAG=QUEUESEARCH
METHOD_6_FLAG=BINARYSEARCH
MAIN_1 := $(DEPENDENT_MAIN:.c=)_$(METHOD_1_FLAG).o
MAIN_2 := $(DEPENDENT_MAIN:.c=)_$(METHOD_2_FLAG).o
MAIN_3 := $(DEPENDENT_MAIN:.c=)_$(METHOD_3_FLAG).o
MAIN_4 := $(DEPENDENT_MAIN:.c=)_$(METHOD_4_FLAG).o
MAIN_5 := $(DEPENDENT_MAIN:.c=)_$(METHOD_5_FLAG).o
MAIN_6 := $(DEPENDENT_MAIN:.c=)_$(METHOD_6_FLAG).o
MAIN_OBJ:= $(MAIN_1) $(MAIN_2) $(MAIN_3) $(MAIN_4) $(MAIN_5) $(MAIN_6)
MAIN_OBJ:= $(addprefix $(OBJECT_DIR)/,$(MAIN_OBJ))
METHOD_1_OBJ = $(MAIN_1) Parsing.o WordFormablePartials.o CheckWordByPartials.o WordSort.o
METHOD_2_OBJ = $(MAIN_2) Parsing.o WordFormableTable.o CharTable.o
METHOD_3_OBJ = $(MAIN_3) Parsing.o WordFormablePowerString.o HashMapString.o CommunicativeHashFunction.o SinglyLinkedList.o WordSort.o
METHOD_4_OBJ = $(MAIN_4) Parsing.o WordFormablePowerVInts.o CheckWordByPartials.o HashMapVInts.o CommunicativeHashFunction.o SinglyLinkedList.o WordSort.o
METHOD_5_OBJ = $(MAIN_5) Parsing.o WordFormableQueueSearch.o DoublyLinkedList.o WordSort.o
METHOD_6_OBJ = $(MAIN_5) Parsing.o WordFormableBinarySearch.o IndexedList.o WordSort.o
METHOD_1_FILE = $(addprefix $(OBJECT_DIR)/, $(METHOD_1_OBJ))
METHOD_2_FILE = $(addprefix $(OBJECT_DIR)/, $(METHOD_2_OBJ))
METHOD_3_FILE = $(addprefix $(OBJECT_DIR)/, $(METHOD_3_OBJ))
METHOD_4_FILE = $(addprefix $(OBJECT_DIR)/, $(METHOD_4_OBJ))
METHOD_5_FILE = $(addprefix $(OBJECT_DIR)/, $(METHOD_5_OBJ))
METHOD_6_FILE = $(addprefix $(OBJECT_DIR)/, $(METHOD_6_OBJ))
ALL_EXECUTABLES = $(EXECUTABLE_1) $(EXECUTABLE_2) $(EXECUTABLE_3) $(EXECUTABLE_4) $(EXECUTABLE_5) $(EXECUTABLE_6)
### Rules section
all: setup $(ALL_EXECUTABLES)
print-%: ; @echo $*=$($*)
rebuild: clean all
setup: | $(OBJECT_DIR)
$(OBJECT_DIR): # Create the object_files directory only if it does not exist.
mkdir -p $@
$(INDEPENDENT_OBJ): $(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.c
$(CC) $(CFLAGS) -o $@ $<
$(OBJECT_DIR)/$(MAIN_1): MFLAG = $(METHOD_1_FLAG)
$(OBJECT_DIR)/$(MAIN_2): MFLAG = $(METHOD_2_FLAG)
$(OBJECT_DIR)/$(MAIN_3): MFLAG = $(METHOD_3_FLAG)
$(OBJECT_DIR)/$(MAIN_4): MFLAG = $(METHOD_4_FLAG)
$(OBJECT_DIR)/$(MAIN_5): MFLAG = $(METHOD_5_FLAG)
$(OBJECT_DIR)/$(MAIN_5): MFLAG = $(METHOD_6_FLAG)
$(MAIN_OBJ): $(SOURCE_DIR)/$(DEPENDENT_MAIN)
$(CC) -DUSE_$(MFLAG) $(CFLAGS) -o $@ $<
$(EXECUTABLE_1): $(METHOD_1_FILE)
$(CC) $(LDFLAGS) -o $@ $^
$(EXECUTABLE_2): $(METHOD_2_FILE)
$(CC) $(LDFLAGS) -o $@ $^
$(EXECUTABLE_3): $(METHOD_3_FILE)
$(CC) $(LDFLAGS) -o $@ $^
$(EXECUTABLE_4): $(METHOD_4_FILE)
$(CC) $(LDFLAGS) -o $@ $^
$(EXECUTABLE_5): $(METHOD_5_FILE)
$(CC) $(LDFLAGS) -o $@ $^
$(EXECUTABLE_6): $(METHOD_6_FILE)
$(CC) $(LDFLAGS) -o $@ $^
.PHONY: clean
clean:
rm -rf $(OBJECT_DIR) $(ALL_EXECUTABLES)