Files
2026_TD3_DEV51_Qualite_Algo/Makefile
T

64 lines
2.1 KiB
Makefile

CC = gcc
CFLAGS ?= -std=c11 -Wall -Wextra -Wpedantic -O2
CFLAGS_PROFIL ?= -std=c11 -Wall -Wextra -Wpedantic -O0 -g -pg
SOURCE = banque.c
PROGRAMME = build/banque
PROGRAMME_PROFIL = build/profil/banque
EMPREINTE_ATTENDUE = ff68d260a7a58441
NOM ?= $(shell whoami)
.PHONY: all run check test bench profile clean help
all: $(PROGRAMME)
$(PROGRAMME): $(SOURCE) Makefile
mkdir -p $(@D)
$(CC) $(CPPFLAGS) $(CFLAGS) $< -o $@ $(LDFLAGS) $(LDLIBS)
run: $(PROGRAMME)
cd build && ./banque
check: $(PROGRAMME)
cd build && ./banque > sortie.txt
@cat build/sortie.txt
@empreinte=$$(awk '/^Empreinte/ {print $$NF}' build/sortie.txt); \
if [ "$$empreinte" != "$(EMPREINTE_ATTENDUE)" ]; then \
printf 'Empreinte incorrecte : %s (attendu %s)\n' "$$empreinte" "$(EMPREINTE_ATTENDUE)" >&2; \
exit 1; \
fi
@printf 'Empreinte correcte.\n'
test: $(SOURCE) tests/test_banque.c
@programme=$$(mktemp); \
trap 'rm -f "$$programme"' EXIT HUP INT TERM; \
$(CC) $(CPPFLAGS) $(CFLAGS) tests/test_banque.c -o "$$programme" $(LDFLAGS) $(LDLIBS) && "$$programme"
# Le script impose gcc -O2, vérifie l'empreinte et mesure 5 exécutions.
bench: $(SOURCE) evaluer.sh
mkdir -p build
cd build && bash "$(abspath evaluer.sh)" "$(abspath $(SOURCE))" "$(NOM)"
@printf 'Mesures disponibles dans build/resultats.csv\n'
$(PROGRAMME_PROFIL): $(SOURCE) Makefile
mkdir -p $(@D)
$(CC) $(CPPFLAGS) $(CFLAGS_PROFIL) $< -o $@ $(LDFLAGS) $(LDLIBS)
profile: $(PROGRAMME_PROFIL)
cd build/profil && ./banque
cd build/profil && gprof -b ./banque gmon.out > profil.txt
@printf 'Profil disponible dans build/profil/profil.txt\n'
clean:
rm -rf build
help:
@printf '%s\n' \
'make Compiler banque.c avec -O2' \
'make run Exécuter et produire build/rapport.txt' \
"make check Vérifier l'empreinte attendue" \
'make test Vérifier les cas limites des fonctions optimisées' \
'make bench NOM=nom Évaluer les performances (médiane de 5 exécutions)' \
'make profile Générer le profil gprof avec -O0 -g -pg' \
'make clean Supprimer build, y compris les mesures et profils'