aboutsummaryrefslogtreecommitdiff
path: root/dotfiles/.local/bin/cstart
blob: 1ff4580e7746b095b86721b61800f814549473c4 (plain)
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
#!/bin/sh

# Yaroslav de la Peña Smirnov 2021
# Script for starting a new C project with the following layout:
# ├── include
# ├── src
# ├── Makefile
# └── README.md

if [ -z "$1" ]; then
	echo "Specify the name of the project" 1>&2
	exit 1
fi

projname="$1"
projupper="$(printf "%s" "$projname" | tr '[a-z]' '[A-Z]')"

printf "CFLAGS?=-std=gnu99 -O2 -Wall
CC?=gcc
RM:=rm -rf

SRC_DIR:=src
OBJ_DIR:=obj
INC_DIRS=\$(addprefix -iquote,include)
LIBS:=

%s_SOURCES:=\$(wildcard \$(SRC_DIR)/*.c)
%s_OBJECTS:=\$(%s_SOURCES:%%.c=\$(OBJ_DIR)/%%.o)
BUILD_DIR:=build

all: \$(BUILD_DIR) %s

%s: \$(%s_OBJECTS)
	\$(CC) \$(LIBS) \$(LDFLAGS) -o \$(BUILD_DIR)/\$@ \$^

\$(OBJ_DIR)/%%.o: %%.c
	\$(CC) -c \$(CFLAGS) -I\$(INCLUDE_DIR) \$(INC_DIRS) -o \$@ \$<

\$(BUILD_DIR):
	mkdir -p \$(BUILD_DIR)
	mkdir -p \$(OBJ_DIR)/src

debug: CFLAGS := -O0 -g -DDEBUG
debug: all

clean:
	\$(RM) \$(%s_OBJECTS)
	\$(RM) \$(BUILD_DIR)/*

.PHONY: clean all debug test

.PRECIOUS: \$(OBJ_DIR)/%%.o
" \
	$projupper \
	$projupper \
	$projupper \
	$projname \
	$projname \
	$projupper \
	$projupper \
	>> Makefile

mkdir -p src include
printf "# %s\n" $projname >> README.md