diff --git a/build.sh b/build.sh index ee0e2e2..0cc8112 100755 --- a/build.sh +++ b/build.sh @@ -1,49 +1,93 @@ #!/bin/bash -# Fonction pour afficher l'aide +BUILD_DIR="build" +OBJ_DIR="obj" +SRC_DIR="src" +APP_NAME="APP" + +# success +function afficher_succes { + tput setaf 2 + echo "✔ $1" + tput sgr0 +} + +# error +function afficher_erreur { + tput setaf 1 + echo "✖ Erreur: $1" + tput sgr0 +} + +function afficher_commande { + tput setaf 3 + echo -e "\t$1" + tput sgr0 +} + +# --help function afficher_aide { echo "Utilisation : $0 [options]" echo "Options :" - echo " -rbuild, -rb : Nettoyer avant de reconstruire et exécuter" - echo " -debug : Configurer la compilation en mode debug" - echo " -run : Exécuter l'exécutable généré" - echo " -clean : Nettoyer les fichiers générés" - echo " --help : Afficher l'aide" + 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" } -# Configuration du répertoire de construction -BUILD_DIR="build" +# errors +function gerer_erreur { + local message=$1 + local code=${2:-1} # Code de sortie par défaut : 1 + afficher_erreur "$message" + exit "$code" +} -# Vérification et création du répertoire de construction -if [ ! -d "$BUILD_DIR" ]; then - mkdir "$BUILD_DIR" +# build exist ? +if [ ! -d "$BUILD_DIR" ] && [ "$#" -gt 0 ] && [ "$1" != "--help" ]; then + mkdir "$BUILD_DIR" || gerer_erreur "Impossible de créer le répertoire $BUILD_DIR." fi -# Fonction pour nettoyer + +BUILD_DIR="build" + +# Clean function nettoyer { - echo "Nettoyage en cours..." - make clean + 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." + afficher_succes "Nettoyage terminé." } -# Fonction pour construire +# build function construire { - echo "Compilation en cours..." - make + local commande="gcc -c -O3 -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." + afficher_succes "Compilation terminée." } -# Fonction pour exécuter +# Execute function executer { - echo "Exécution de l'exécutable..." - ./build/CMAKE + local commande="./$BUILD_DIR/$APP_NAME" + echo -e "➔ Exécution de l'exécutable..." + afficher_commande "$commande" + if [ -x "$commande" ]; then + "$commande" || gerer_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." + fi } -# Vérification des arguments -if [ "$#" -eq 0 ]; then - echo "Erreur : Aucune option spécifiée. Utilisez --help pour afficher l'aide." +if [ "$#" -eq 0 ] || [ "$1" == "--help" ]; then + afficher_aide exit 1 fi -# Traitement des arguments +# arguments while [ "$#" -gt 0 ]; do case "$1" in -rbuild | -rb) @@ -52,8 +96,11 @@ while [ "$#" -gt 0 ]; do executer ;; -debug) - echo "Configuration de la compilation en mode debug..." - make 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." + construire + executer ;; -run) construire @@ -67,8 +114,7 @@ while [ "$#" -gt 0 ]; do exit 0 ;; *) - echo "Option non reconnue : $1. Utilisez --help pour afficher l'aide." - exit 1 + gerer_erreur "Option non reconnue : $1. Utilisez --help pour afficher l'aide." ;; esac shift diff --git a/makefile b/makefile index de9926a..9693c9b 100644 --- a/makefile +++ b/makefile @@ -34,7 +34,6 @@ all: build build: $(BUILD_DIR)/$(EXECUTABLE) $(BUILD_DIR)/$(EXECUTABLE): $(OBJECTS) - @echo "Début de la compilation" @mkdir -p $(BUILD_DIR) $(CC) $(LDFLAGS) -o $@ $^ @@ -43,11 +42,9 @@ $(OBJ_DIR)/%.o: $(SRC_DIR)/%.c $(CC) -c $(CFLAGS_RELEASE) -o $@ $< debug: - @echo "Configuration de la compilation en mode debug..." $(MAKE) CFLAGS_RELEASE="$(CFLAGS_DEBUG)" build clean: - @echo "Nettoyage en cours..." rm -rf $(OBJ_DIR) $(BUILD_DIR) run: build