Enhancement build.sh (better error handling, better display and better code in general)

pull/1/head
Mathéo Hersan 2 years ago
parent a66ee86634
commit d15d0410fa

@ -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

@ -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

Loading…
Cancel
Save