-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathnew_makefile.sh
More file actions
executable file
·116 lines (110 loc) · 2.55 KB
/
Copy pathnew_makefile.sh
File metadata and controls
executable file
·116 lines (110 loc) · 2.55 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
#!/bin/bash
function new_makefile()
{
BIN_DIR="bin/"
OBJ_DIR="obj/"
SRC_DIR="src/"
if ! [ -e ".project_name" ]; then
if [[ "$1" == "" ]]; then
echo -n ".project_name not found, name your project: "
read -r NAME;
if [[ "$NAME" == "" ]]; then
echo "quitting.."
return;
else
echo "$NAME" > ".project_name"; fi
else
echo "$1" > ".$1";
fi
else
echo -n "-> Project: "; cat ".project_name"
fi
NAME="$(cat .project_name)"
if ! [ -e "$BIN_DIR" ]
then
mkdir $BIN_DIR
fi
if ! [ -e "$SRC_DIR" ]
then
mkdir $SRC_DIR
fi
if [ -f "Makefile" ]
then
echo -n "overwrite ./Makefile? (y/n [n]) "
read -r ANSWER
case "$ANSWER" in
[yY] | [yY][eE][sS])
echo 'overwriting...'
WRITE_MAKEFILE=1
;;
*)
echo "quitting.."
return
;;
esac
else
echo 'writing ./Makefile'
WRITE_MAKEFILE=1
fi
if [ $WRITE_MAKEFILE ]; then
echo 'Generating Makefile'
echo "### auto-generated Makefile ###" > "Makefile";
echo
{
echo;
echo "NAME = $NAME";
echo;
echo "SRC_DIR = $SRC_DIR";
echo "OBJ_DIR = $OBJ_DIR";
echo "BIN_DIR = $BIN_DIR";
echo 'BIN = $(BIN_DIR)$(NAME)';
echo;
echo -n "SRC = ";
ls -1 src/*.cpp | sed 's/.*\///' | awk 'NR>1{printf "\t\t\t\t"}; {print $0" \\"}';
echo;
echo -n "HEADERS = ";
ls -1 src/*.hpp | sed 's/.*\///' | awk 'NR>1{printf "\t\t\t\t"}; {print $0" \\"}';
echo;
echo 'OBJ = $(addprefix $(OBJ_DIR), $(SRC:%.cpp=%.o))';
echo;
echo 'CFLAGS = -Wall -Werror -Wextra -std=c++98 -pedantic # -g -fsanitize=address';
echo "CC = c++";
echo;
echo 'ifeq ("$(VERBOSE)","1")';
echo 'Q :=';
echo 'VECHO = @echo';
echo 'else';
echo 'Q := @';
echo 'VECHO = @echo';
echo 'endif';
echo;
echo 'all: $(BIN)';
echo;
echo '$(BIN): $(OBJ)';
echo ' $(Q)mkdir -p $(@D)';
echo ' $(VECHO)';
printf ' $(VECHO) "\\033[36mLinking binary file: \\033[0m$@ 🚨"\n';
echo ' $(VECHO)';
echo ' $(Q)$(CC) $^ $(CFLAGS) -o $@';
echo;
echo '$(OBJ_DIR)%.o: $(SRC_DIR)%.cpp $(addprefix $(SRC_DIR), $(HEADERS))';
echo ' $(Q)mkdir -p $(@D)';
printf ' $(VECHO) "\\033[34mCompiling object file: \\033[0m$@"\n';
echo ' $(Q)$(CC) -c $< $(CFLAGS) -o $@';
echo;
echo 'clean:';
printf ' $(VECHO) "\\033[31mRemoving object files\\033[0m"\n';
echo ' $(VECHO)';
echo ' $(Q)rm -rf $(OBJ_DIR)';
echo;
echo 'fclean: clean';
printf ' $(VECHO) "\\033[31mRemoving binary\\033[0m"\n';
echo ' $(VECHO)';
echo ' $(Q)rm -f $(BIN)';
echo;
echo 're: clean all';
echo;
echo '.PHONY: all clean fclean re';
} >> "Makefile"
fi
}