-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmake.sh
More file actions
executable file
·119 lines (84 loc) · 1.86 KB
/
make.sh
File metadata and controls
executable file
·119 lines (84 loc) · 1.86 KB
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
114
115
116
117
118
119
# This script creates a Makefile for a project.
# All of the source files must be in a /src folder.
# This script will create a /obj folder for the object
# files and a /bin folder for the executable.
#
# By Jordan Marling
#
# Usage:
# ./make.sh <executable name>
if [ ! $1 ]
then
echo "Usage: ./make.sh <executable name>"
exit
fi
if [ ! -d "src" ]
then
echo "src directory does not exist."
exit
fi
FILE="Makefile"
FLAGS="-Wall"
LIBS="-lSDL2 -lSDL2_net"
CC="g++"
SRC_FILES=""
COMPILE=""
strindex() {
x="${1%%$2*}"
[[ $x = $1 ]] && echo -1 || echo ${#x}
}
if [ -f $FILE ]
then
contents=$(<$FILE)
a=$(strindex "$contents" "CC=")
a=$(($a + 3))
b=$(strindex "${contents:$a}" $'\n')
CC=${contents:$a:$b}
a=$(strindex "$contents" "FLAGS=")
a=$(($a + 6))
b=$(strindex "${contents:$a}" $'\n')
FLAGS=${contents:$a:$b}
a=$(strindex "$contents" "LIBS=")
a=$(($a + 5))
b=$(strindex "${contents:$a}" $'\n')
LIBS=${contents:$a:$b}
fi
src="src/*"
for f in $(find $src -name '*.c' -or -name '*.cpp');
do
f=${f:4}
obj=${f/.cpp/.o}
obj=${obj/.c/.o}
cpp=$f
SRC_FILES="$SRC_FILES \$(OBJDIR)/${obj}"
path=$(dirname "$obj")
if [ "$path" == "." ]
then
path=""
fi
COMPILE="$COMPILE
\$(OBJDIR)/${obj}: \$(SRCDIR)/${cpp}
test -d \$(OBJDIR)/$path || mkdir -p \$(OBJDIR)/$path
\$(CC) \$(FLAGS) -c -o \$(OBJDIR)/${obj} \$(SRCDIR)/${cpp}
"
done
echo "CC=${CC}
FLAGS=${FLAGS}
LIBS=${LIBS}
BINDIR=bin
OBJDIR=obj
SRCDIR=src
BIN_DEFAULT=\$(BINDIR)/${1}
OBJ_DEFAULT=${SRC_FILES:1}
${1}: \$(OBJ_DEFAULT)
test -d \$(BINDIR) || mkdir -p \$(BINDIR)
\$(CC) \$(FLAGS) -o \$(BINDIR)/${1} \$(OBJ_DEFAULT) \$(LIBS)
run: ${1}
\$(BINDIR)/${1}
clean:
rm -f \$(OBJ_DEFAULT) \$(BIN_DEFAULT)
debug: \$(OBJ_DEFAULT)
test -d \$(BINDIR) || mkdir -p \$(BINDIR)
\$(CC) \$(FLAGS) -g -o \$(BINDIR)/${1} \$(OBJ_DEFAULT) \$(LIBS)
gdb -tui \$(BINDIR)/${1}
${COMPILE}" > $FILE