1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
EXT = c
CC = gcc
DEBUG = yes
CFLAGS = -W -Wall -ansi -pedantic
# Ici, on active le standard C99 si le projet est en C
ifeq ($(CC),gcc)
CFLAGS := $(CFLAGS) -std=c99
endif
# La constant DEBUG peut être utilisée dans votre projet.
# Ex. pour faire des printf conditionnels.
ifeq ($(DEBUG),yes)
CFLAGS := -g $(CFLAGS) -DDEBUG
endif
LDFLAGS=
# Le nom de l'exécutable final
EXEC=dicosyn
# Les fichiers sont séparés dans des répertoires distincts.
SRCDIR=src
OBJDIR=obj
BINDIR=bin
# Ici, vous pouvez exclure une liste de fichiers des sources.
# Ex. une acienne implémentation que vous ne voulez pas supprimer.
EXCLUDE=$(SRCDIR)/dico-old.c
# Ici, la liste de fichiers est construite
SRC = $(wildcard $(SRCDIR)/*.$(EXT))
SRC := $(filter-out $(EXCLUDE),$(SRC))
OBJ = $(SRC:$(SRCDIR)/%.c=$(OBJDIR)/%.o)
# La cible par défaut est all
default: all
# La cible all construit l'exécutable
all: $(EXEC)
# Ici, on indique les cibles qui ne génèrent pas de fichier
# et qui, par conséquent, doivent toujours être exécutées
.PHONY: help clean mrproper
# Affichage de l'aide
help:
@ echo 'Makefile for ISIN project `dicosyn`'
@ echo ''
@ echo 'Usage :'
@ echo 'make Build project executable'
@ echo 'make all Build project executable'
@ echo 'make clean Clean objects directory'
@ echo 'make mrproper Remove objects and binaries directory'
@ echo 'make help Show this help message'
@ echo ''
# Cible de construction de l'exécutable
$(EXEC): $(OBJ)
@ [ -d $(BINDIR) ] || mkdir $(BINDIR)
@ $(CC) -o $(BINDIR)/$@ $^ $(LDFLAGS)
@ [ -h $@ ] || ln -s $(BINDIR)/$@ $@
# Déclaration des dépendances supplémentaires spécifiques
# Les dépendances listées ici s'ajoutent à la règle générique
$(OBJDIR)/mot.o: $(SRCDIR)/liste.h
# En cas de liste trop longue liste, on peut le faire en deux étapes
DICODEPS=arbre.h mot.h
$(OBJDIR)/dico.o: $(DICODEPS:%=$(SRCDIR)/%)
INDEX2DEPS=table.h mot.h
$(OBJDIR)/index2.o: $(INDEX2DEPS:%=$(SRCDIR)/%)
# Déclaration de a règle générique
# Si tous vos fichiers c/cpp n'ont pas de .h correspondant,
# vous pouvez enlever $(SRCDIR)/%.h des dépendances.
$(OBJDIR)/%.o: $(SRCDIR)/%.c $(SRCDIR)/%.h
@ [ -d $(OBJDIR) ] || mkdir $(OBJDIR)
@ $(CC) -o $@ -c $< $(CFLAGS)
# Nettoyage du répertoire des objets
clean:
@ rm -f $(OBJDIR)/*.o
# Suppression des répertoires des objets et des binaires
mrproper: clean
@ rm -rf $(EXEC) $(OBJDIR) $(BINDIR) |
Partager