-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
91 lines (71 loc) · 2.7 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
##
# Makefile
# whitespace
#
# @author kuroneko
# @copyright 2015 kuroneko. All rights reserved
##
WHITESPACE_TARGET = kws
COLOR_TARGET = kwsc
SAMPLE_PROGRAM_URL = "http://compsoc.dur.ac.uk/whitespace/hworld.ws"
SOURCES_DIRECTORY = sources
DESTINATION_DIRECTORY = destination
SAMPLE_DIRECTORY = sample
SAMPLE_PROGRAM = $(SAMPLE_DIRECTORY)/hworld.ws
SAMPLE_COLOR_PROGRAM = $(SAMPLE_DIRECTORY)/hworld.ws.color
INCLUDES_DIRECTORY = $(SOURCES_DIRECTORY)/includes
LIBRARIES_DIRECTORY = $(SOURCES_DIRECTORY)/libraries
WHITESPACE_DIRECTORY = whitespace
COLOR_DIRECTORY = color
WHITESPACE_OBJECTS = \
$(DESTINATION_DIRECTORY)/$(WHITESPACE_DIRECTORY)/main.o \
$(DESTINATION_DIRECTORY)/$(WHITESPACE_DIRECTORY)/prepare.o \
$(DESTINATION_DIRECTORY)/$(WHITESPACE_DIRECTORY)/execute.o \
$(DESTINATION_DIRECTORY)/$(WHITESPACE_DIRECTORY)/show.o
WHITESPACE_LIBRARIES = \
$(LIBRARIES_DIRECTORY)/kuroneko-lib.a
WHITESPACE_DEFINITIONS = \
$(SOURCES_DIRECTORY)/$(WHITESPACE_DIRECTORY)/whitespace.h
COLOR_OBJECTS = \
$(DESTINATION_DIRECTORY)/$(COLOR_DIRECTORY)/main.o
COMPILE_OBJECT_OPTIONS = \
-I $(INCLUDES_DIRECTORY) \
-Wall
all: $(WHITESPACE_TARGET) $(COLOR_TARGET)
$(WHITESPACE_TARGET): $(WHITESPACE_OBJECTS) $(WHITESPACE_LIBRARIES)
gcc -o $@ $(WHITESPACE_OBJECTS) $(WHITESPACE_LIBRARIES)
$(WHITESPACE_OBJECTS): $(WHITESPACE_DEFINITIONS)
$(DESTINATION_DIRECTORY)/$(WHITESPACE_DIRECTORY)/%.o: $(SOURCES_DIRECTORY)/$(WHITESPACE_DIRECTORY)/%.c
@if [ ! -e "$(DESTINATION_DIRECTORY)/$(WHITESPACE_DIRECTORY)" ]; \
then \
echo "execute: mkdir -p $(DESTINATION_DIRECTORY)/$(WHITESPACE_DIRECTORY)"; \
mkdir -p "$(DESTINATION_DIRECTORY)/$(WHITESPACE_DIRECTORY)"; \
fi
gcc $(COMPILE_OBJECT_OPTIONS) -c $< -o $@
$(COLOR_TARGET): $(COLOR_OBJECTS)
gcc -o $@ $(COLOR_OBJECTS)
$(COLOR_OBJECTS):
$(DESTINATION_DIRECTORY)/$(COLOR_DIRECTORY)/%.o: $(SOURCES_DIRECTORY)/$(COLOR_DIRECTORY)/%.c
@if [ ! -e "$(DESTINATION_DIRECTORY)/$(COLOR_DIRECTORY)" ]; \
then \
echo "execute: mkdir -p $(DESTINATION_DIRECTORY)/$(COLOR_DIRECTORY)"; \
mkdir -p "$(DESTINATION_DIRECTORY)/$(COLOR_DIRECTORY)"; \
fi
gcc $(COMPILE_OBJECT_OPTIONS) -c $< -o $@
clean:
rm -rf $(DESTINATION_DIRECTORY) $(SAMPLE_DIRECTORY)
rm -f $(WHITESPACE_TARGET) $(COLOR_TARGET)
test: $(WHITESPACE_TARGET) $(COLOR_TARGET) $(SAMPLE_PROGRAM)
@cat $(SAMPLE_PROGRAM) | ./kwsc > $(SAMPLE_COLOR_PROGRAM)
@cat $(SAMPLE_PROGRAM) | ./kws
testwsc: $(COLOR_TARGET) $(SAMPLE_PROGRAM)
@cat $(SAMPLE_PROGRAM) | ./kwsc
testws: $(WHITESPACE_TARGET) $(SAMPLE_PROGRAM)
@cat $(SAMPLE_PROGRAM) | ./kws
$(SAMPLE_PROGRAM):
@if [ ! -e "$(SAMPLE_DIRECTORY)" ]; \
then \
echo "execute: mkdir -p $(SAMPLE_DIRECTORY)"; \
mkdir -p "$(SAMPLE_DIRECTORY)"; \
fi
@curl $(SAMPLE_PROGRAM_URL) > $(SAMPLE_PROGRAM)