#!/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 <> "$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 <> "$name"/src/"$name".c /******************************************************************************** C Programming (2nd ed.) A Modern Approach, by K. N. King ISBN: 9780393871845 ********************************************************************************/ EOT