Better makefile and trying some things in build.sh

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

@ -4,15 +4,15 @@ BUILD_DIR="build"
OBJ_DIR="obj" OBJ_DIR="obj"
SRC_DIR="src" SRC_DIR="src"
APP_NAME="APP" APP_NAME="APP"
GCC_OPTIONS="-c -O3"
# success # Fonctions d'affichage
function afficher_succes { function afficher_succes {
tput setaf 2 tput setaf 2
echo "$1" echo "$1"
tput sgr0 tput sgr0
} }
# error
function afficher_erreur { function afficher_erreur {
tput setaf 1 tput setaf 1
echo "✖ Erreur: $1" echo "✖ Erreur: $1"
@ -25,69 +25,63 @@ function afficher_commande {
tput sgr0 tput sgr0
} }
# --help # Fonction pour afficher les points avec un effet de saut
function afficher_aide { function afficher_points_saut {
echo "Utilisation : $0 [options]" for _ in {1..1}; do
echo "Options :" echo -ne "\n\t⬇ ⬇ ⬇ \n\n"
echo -e "\t-rbuild, -rb : \t➔ Nettoyer avant de reconstruire et exécuter" sleep 0.5
echo -e "\t-debug : \t➔ Configurer la compilation en mode debug" done
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"
} }
# build exist ? # Vérification et création des répertoires
if [ ! -d "$BUILD_DIR" ] && [ "$#" -gt 0 ] && [ "$1" != "--help" ]; then 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 fi
# Nettoyer les fichiers générés
BUILD_DIR="build"
# Clean
function nettoyer { function nettoyer {
local commande="rm -rf $OBJ_DIR $BUILD_DIR" local commande="rm -rf $OBJ_DIR $BUILD_DIR"
echo -e "➔ Nettoyage en cours..." echo -e "➔ Nettoyage en cours..."
afficher_commande "$commande" 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é." afficher_succes "Nettoyage terminé."
} }
# build # Compilation
function construire { 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..." echo -e "➔ Compilation en cours..."
afficher_commande "$commande" 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." afficher_succes "Compilation terminée."
} }
# Execute # Exécuter l'exécutable
function executer { 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..." echo -e "➔ Exécution de l'exécutable..."
afficher_commande "$commande" afficher_commande "$commande"
if [ -x "$commande" ]; then if [ -x "$executable" ]; then
"$commande" || gerer_erreur "Erreur lors de l'exécution." afficher_points_saut
"$commande" || afficher_erreur "Erreur lors de l'exécution."
else 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 fi
} }
if [ "$#" -eq 0 ] || [ "$1" == "--help" ]; then # Afficher l'aide
afficher_aide function afficher_aide {
exit 1 echo "Utilisation : $0 [options]"
fi 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 while [ "$#" -gt 0 ]; do
case "$1" in case "$1" in
-rbuild | -rb) -rbuild | -rb)
@ -98,7 +92,7 @@ while [ "$#" -gt 0 ]; do
-debug) -debug)
echo -e "➔ Configuration de la compilation en mode debug..." echo -e "➔ Configuration de la compilation en mode debug..."
afficher_commande "make 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 construire
executer executer
;; ;;
@ -114,7 +108,7 @@ while [ "$#" -gt 0 ]; do
exit 0 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 esac
shift shift

Binary file not shown.

@ -1,34 +1,19 @@
# Compiler
CC = gcc 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 SRC_DIR = src
# Dossiers pour les fichiers objets
OBJ_DIR = obj OBJ_DIR = obj
# Fichiers source
SOURCES = $(wildcard $(SRC_DIR)/*.c) SOURCES = $(wildcard $(SRC_DIR)/*.c)
# Fichiers objets
OBJECTS = $(patsubst $(SRC_DIR)/%.c, $(OBJ_DIR)/%.o, $(SOURCES)) OBJECTS = $(patsubst $(SRC_DIR)/%.c, $(OBJ_DIR)/%.o, $(SOURCES))
# Nom de l'exécutable
EXECUTABLE = APP EXECUTABLE = APP
# Répertoire de construction
BUILD_DIR = build BUILD_DIR = build
# Options pour l'exécutable
LDFLAGS = LDFLAGS =
CFLAGS_RELEASE = -O3
CFLAGS_DEBUG = -g -O0
# Commandes # Generate dependency files
DEPS = $(OBJECTS:.o=.d)
-include $(DEPS)
# Commands
all: build all: build
build: $(BUILD_DIR)/$(EXECUTABLE) build: $(BUILD_DIR)/$(EXECUTABLE)
@ -39,7 +24,7 @@ $(BUILD_DIR)/$(EXECUTABLE): $(OBJECTS)
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c $(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
@mkdir -p $(OBJ_DIR) @mkdir -p $(OBJ_DIR)
$(CC) -c $(CFLAGS_RELEASE) -o $@ $< $(CC) -c $(CFLAGS_RELEASE) -MMD -MP -o $@ $<
debug: debug:
$(MAKE) CFLAGS_RELEASE="$(CFLAGS_DEBUG)" build $(MAKE) CFLAGS_RELEASE="$(CFLAGS_DEBUG)" build
@ -56,4 +41,3 @@ doc_doxygen:
.PHONY: all build debug clean run doc_doxygen .PHONY: all build debug clean run doc_doxygen

Loading…
Cancel
Save