diff --git a/build.sh b/build.sh index 0cc8112..3360e3b 100755 --- a/build.sh +++ b/build.sh @@ -4,15 +4,15 @@ BUILD_DIR="build" OBJ_DIR="obj" SRC_DIR="src" APP_NAME="APP" +GCC_OPTIONS="-c -O3" -# success +# Fonctions d'affichage function afficher_succes { tput setaf 2 echo "✔ $1" tput sgr0 } -# error function afficher_erreur { tput setaf 1 echo "✖ Erreur: $1" @@ -25,69 +25,63 @@ function afficher_commande { tput sgr0 } -# --help -function afficher_aide { - echo "Utilisation : $0 [options]" - echo "Options :" - echo -e "\t-rbuild, -rb : \t➔ Nettoyer avant de reconstruire et exécuter" - echo -e "\t-debug : \t➔ Configurer la compilation en mode debug" - echo -e "\t-run : \t➔ Exécuter l'exécutable généré" - echo -e "\t-clean : \t➔ Nettoyer les fichiers générés" - echo -e "\t--help : \t➔ Afficher l'aide" -} - -# errors -function gerer_erreur { - local message=$1 - local code=${2:-1} # Code de sortie par défaut : 1 - afficher_erreur "$message" - exit "$code" +# Fonction pour afficher les points avec un effet de saut +function afficher_points_saut { + for _ in {1..1}; do + echo -ne "\n\t⬇ ⬇ ⬇ \n\n" + sleep 0.5 + done } -# build exist ? +# Vérification et création des répertoires if [ ! -d "$BUILD_DIR" ] && [ "$#" -gt 0 ] && [ "$1" != "--help" ]; then - mkdir "$BUILD_DIR" || gerer_erreur "Impossible de créer le répertoire $BUILD_DIR." + mkdir "$BUILD_DIR" || afficher_erreur "Impossible de créer le répertoire $BUILD_DIR." fi - -BUILD_DIR="build" - -# Clean +# Nettoyer les fichiers générés function nettoyer { local commande="rm -rf $OBJ_DIR $BUILD_DIR" echo -e "➔ Nettoyage en cours..." afficher_commande "$commande" - make clean > /dev/null|| gerer_erreur "Erreur lors du nettoyage." + make clean > /dev/null || afficher_erreur "Erreur lors du nettoyage." afficher_succes "Nettoyage terminé." } -# build +# Compilation function construire { - local commande="gcc -c -O3 -o $OBJ_DIR/main.o $SRC_DIR/main.c" + local commande="gcc $GCC_OPTIONS -o $OBJ_DIR/main.o $SRC_DIR/main.c" echo -e "➔ Compilation en cours..." afficher_commande "$commande" - make > /dev/null|| gerer_erreur "Erreur lors de la compilation." + make > /dev/null|| afficher_erreur "Erreur lors de la compilation." afficher_succes "Compilation terminée." } -# Execute +# Exécuter l'exécutable function executer { - local commande="./$BUILD_DIR/$APP_NAME" + local executable="$BUILD_DIR/$APP_NAME" + local commande="./$executable" echo -e "➔ Exécution de l'exécutable..." afficher_commande "$commande" - if [ -x "$commande" ]; then - "$commande" || gerer_erreur "Erreur lors de l'exécution." + if [ -x "$executable" ]; then + afficher_points_saut + "$commande" || afficher_erreur "Erreur lors de l'exécution." else - gerer_erreur "Erreur lors de l'exécution. Le fichier $BUILD_DIR/$APP_NAME n'est pas exécutable." + afficher_erreur "Erreur lors de l'exécution. Le fichier $executable n'est pas exécutable." fi } -if [ "$#" -eq 0 ] || [ "$1" == "--help" ]; then - afficher_aide - exit 1 -fi +# Afficher l'aide +function afficher_aide { + echo "Utilisation : $0 [options]" + echo "Options :" + echo -e "\t-rbuild, -rb : \t➔ Nettoyer avant de reconstruire et exécuter" + echo -e "\t-debug : \t➔ Configurer la compilation en mode debug" + echo -e "\t-run : \t➔ Exécuter l'exécutable généré" + echo -e "\t-clean : \t➔ Nettoyer les fichiers générés" + echo -e "\t--help : \t➔ Afficher l'aide" +} -# arguments +# Boucle d'options while [ "$#" -gt 0 ]; do case "$1" in -rbuild | -rb) @@ -98,7 +92,7 @@ while [ "$#" -gt 0 ]; do -debug) echo -e "➔ Configuration de la compilation en mode debug..." afficher_commande "make debug" - make debug || gerer_erreur "Erreur lors de la configuration en mode debug." + make debug || afficher_erreur "Erreur lors de la configuration en mode debug." construire executer ;; @@ -114,7 +108,7 @@ while [ "$#" -gt 0 ]; do exit 0 ;; *) - gerer_erreur "Option non reconnue : $1. Utilisez --help pour afficher l'aide." + afficher_erreur "Option non reconnue : $1. Utilisez --help pour afficher l'aide." ;; esac shift diff --git a/build/APP b/build/APP new file mode 100755 index 0000000..f886223 Binary files /dev/null and b/build/APP differ diff --git a/makefile b/makefile index 9693c9b..6de9008 100644 --- a/makefile +++ b/makefile @@ -1,34 +1,19 @@ - -# Compiler CC = gcc - -# Options de compilation pour le release -CFLAGS_RELEASE = -O3 -# Options de compilation pour le debug -CFLAGS_DEBUG = -g -Wall - -# Dossiers source SRC_DIR = src -# Dossiers pour les fichiers objets OBJ_DIR = obj - -# Fichiers source SOURCES = $(wildcard $(SRC_DIR)/*.c) - -# Fichiers objets OBJECTS = $(patsubst $(SRC_DIR)/%.c, $(OBJ_DIR)/%.o, $(SOURCES)) - -# Nom de l'exécutable EXECUTABLE = APP - -# Répertoire de construction BUILD_DIR = build - -# Options pour l'exécutable LDFLAGS = +CFLAGS_RELEASE = -O3 +CFLAGS_DEBUG = -g -O0 -# Commandes +# Generate dependency files +DEPS = $(OBJECTS:.o=.d) +-include $(DEPS) +# Commands all: build build: $(BUILD_DIR)/$(EXECUTABLE) @@ -39,7 +24,7 @@ $(BUILD_DIR)/$(EXECUTABLE): $(OBJECTS) $(OBJ_DIR)/%.o: $(SRC_DIR)/%.c @mkdir -p $(OBJ_DIR) - $(CC) -c $(CFLAGS_RELEASE) -o $@ $< + $(CC) -c $(CFLAGS_RELEASE) -MMD -MP -o $@ $< debug: $(MAKE) CFLAGS_RELEASE="$(CFLAGS_DEBUG)" build @@ -56,4 +41,3 @@ doc_doxygen: .PHONY: all build debug clean run doc_doxygen -