From e6f62e8c5445c121adbfde76b037fd712cd2a1cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yaroslav=20de=20la=20Pe=C3=B1a=20Smirnov?= Date: Thu, 5 Aug 2021 05:35:44 +0300 Subject: cstart Script for starting new C projects --- dotfiles/.local/bin/cstart | 64 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100755 dotfiles/.local/bin/cstart diff --git a/dotfiles/.local/bin/cstart b/dotfiles/.local/bin/cstart new file mode 100755 index 0000000..1ff4580 --- /dev/null +++ b/dotfiles/.local/bin/cstart @@ -0,0 +1,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 -- cgit v1.2.3