scaffold.sh
· 1.1 KiB · Bash
Orginalformat
#!/usr/bin/env bash
name=$1
if [ -d "$name" ]; then
echo "program $name already exists"
exit 1
fi
mkdir -p "$name"/{src,include}/
touch "$name"/makefile
cat <<EOT >> "$name"/makefile
program = $name
CC = gcc
SRC_DIR := src
OBJ_DIR := obj
BIN_DIR := bin
INCLUDES := -Iinclude
EXE := \$(BIN_DIR)/\$(program).out
SRC := \$(wildcard \$(SRC_DIR)/*.c)
OBJ := \$(SRC:\$(SRC_DIR)/%.c=\$(OBJ_DIR)/%.o)
CPPFLAGS := \$(INCLUDES) -MMD -MP
CFLAGS = -O -Wall -W -pedantic -ansi -std=c99
LDFLAGS := -Llib
LDLIBS := -lm
.PHONY: all clean
all: \$(EXE)
\$(EXE): \$(OBJ) | \$(BIN_DIR)
\$(CC) \$(LDFLAGS) \$^ \$(LDLIBS) -o \$@
\$(OBJ_DIR)/%.o: \$(SRC_DIR)/%.c | \$(OBJ_DIR)
\$(CC) \$(CPPFLAGS) \$(CFLAGS) -c $< -o \$@
\$(BIN_DIR) \$(OBJ_DIR):
@mkdir -p \$@
clean:
@rm -rv \$(BIN_DIR) \$(OBJ_DIR)
-include \$(OBJ:.o=.d)
EOT
cat <<EOT >> "$name"/src/"$name".c
/********************************************************************************
C Programming (2nd ed.) A Modern Approach, by
K. N. King
ISBN: 9780393871845
********************************************************************************/
EOT
1 | #!/usr/bin/env bash |
2 | |
3 | name=$1 |
4 | |
5 | if [ -d "$name" ]; then |
6 | echo "program $name already exists" |
7 | exit 1 |
8 | fi |
9 | |
10 | mkdir -p "$name"/{src,include}/ |
11 | touch "$name"/makefile |
12 | |
13 | cat <<EOT >> "$name"/makefile |
14 | program = $name |
15 | |
16 | CC = gcc |
17 | SRC_DIR := src |
18 | OBJ_DIR := obj |
19 | BIN_DIR := bin |
20 | INCLUDES := -Iinclude |
21 | |
22 | EXE := \$(BIN_DIR)/\$(program).out |
23 | SRC := \$(wildcard \$(SRC_DIR)/*.c) |
24 | OBJ := \$(SRC:\$(SRC_DIR)/%.c=\$(OBJ_DIR)/%.o) |
25 | |
26 | CPPFLAGS := \$(INCLUDES) -MMD -MP |
27 | CFLAGS = -O -Wall -W -pedantic -ansi -std=c99 |
28 | LDFLAGS := -Llib |
29 | LDLIBS := -lm |
30 | |
31 | .PHONY: all clean |
32 | |
33 | all: \$(EXE) |
34 | |
35 | \$(EXE): \$(OBJ) | \$(BIN_DIR) |
36 | \$(CC) \$(LDFLAGS) \$^ \$(LDLIBS) -o \$@ |
37 | |
38 | \$(OBJ_DIR)/%.o: \$(SRC_DIR)/%.c | \$(OBJ_DIR) |
39 | \$(CC) \$(CPPFLAGS) \$(CFLAGS) -c $< -o \$@ |
40 | |
41 | \$(BIN_DIR) \$(OBJ_DIR): |
42 | @mkdir -p \$@ |
43 | |
44 | clean: |
45 | @rm -rv \$(BIN_DIR) \$(OBJ_DIR) |
46 | |
47 | -include \$(OBJ:.o=.d) |
48 | EOT |
49 | |
50 | cat <<EOT >> "$name"/src/"$name".c |
51 | /******************************************************************************** |
52 | C Programming (2nd ed.) A Modern Approach, by |
53 | K. N. King |
54 | ISBN: 9780393871845 |
55 | ********************************************************************************/ |
56 | EOT |