#!/usr/bin/env sh ###################################################################### # @author : swytch # @file : maker # @license : GPLv3 # @created : Wednesday May 20, 2020 18:18:53 CEST # # @description : create a makefile for current project (if c/c++) # open it with (neo)vim ###################################################################### headers_list="$(ls | grep '\.hp*$')" sources_list="$(ls | grep '\.cp*$')" modules_list="$(printf "\n$sources_list" | sed 's/\.cp*//g' | tr '\n' ' ')" targets_list="$(printf "\n$sources_list" | sed 's/\.cp*/\.o/g' | tr '\n' ' ')" get_compiler(){ for source_ in "$sources_list"; do case "$source_" in *.cpp) comp="g++";; *.c) comp="gcc";; esac done } is_c_project(){ [ -n "$sources_list" ] } make_rule(){ if [ "$comp" = "gcc" ]; then if [ "$1" = "main" ]; then printf "\n$1.o : $1.c" >> makefile else printf "\n$1.o : $1.c $1.h" >> makefile fi printf "\n\t\$(CC) -c $1.c \$(FLAGS)" >> makefile else if [ "$1" = "main" ]; then printf "\n$1.o : $1.cpp" >> makefile else printf "\n$1.o : $1.cpp $1.hpp" >> makefile fi printf "\n\t\$(CC) -c $1.cpp \$(FLAGS)" >> makefile fi printf "\n" >> makefile } if ! is_c_project; then printf "\nNo C/C++ project in directory. Exiting..." exit 1 fi get_compiler touch makefile printf "BIN = main" > makefile printf "\nTARGETS = $targets_list" >> makefile printf "\n" >> makefile printf "\nCC = $comp" >> makefile printf "\nFLAGS = -Wall -g" >> makefile printf "\n" >> makefile printf "\nall : \$(BIN)" >> makefile printf "\n" >> makefile printf "\n\$(BIN) : \$(TARGETS)" >> makefile printf "\n\t\$(CC) \$(TARGETS) -o \$(BIN) \$(FLAGS)" >> makefile printf "\n" >> makefile for module in $modules_list; do make_rule "$module" done printf "\nclean :" >> makefile printf "\n\trm \$(BIN) *.o vgcore.*" >> makefile sed -i 's/\s$//' makefile if command -v nvim > /dev/null 2>&1; then nvim makefile else vim makefile fi