Makefile automatique
Voici un makefile générique qui compile tout les fichier source d'un répertoire
WARN = -W -Wall -Wnested-externs -Wpointer-arith -Winline -Wcast-qual -Wcast-align -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wstrict-prototypes -Wshadow
CFLAGS = --std=c99 -pedantic $(WARN)
OPTIMISE = yes
DEBUG = yes
ifeq ($(DEBUG), yes)
CFLAGS += -ggdb
endif
ifeq ($(OPTIMISE), yes)
CFLAGS += -O2
endif
CC=gcc
SRC= $(wildcard *.c)
OBJ= $(SRC:.c=.o)
PROJET = projet
all: $(PROJET)
$(PROJET): $(OBJ)
$(CC) -o $(PROJET) $(OBJ) $(CFLAGS)
%.o : %.c %.h
@echo -e "CC\t" $< "\t" $@ @$(CC) -o $@ -c $< $(CFLAGS) %.o : %.c @echo -e "CC\t" $< "\t" $@ @$(CC) -o $@ -c $< $(CFLAGS) clean: rm -rf $(OBJ) $(PROJET) @if [ -f core ] ; then rm -f core; echo "rm core" ;fi mrproper: clean rm -rf *~archive: mrproper
cd .. && tar cjvf $(PROJET)-`date +%d%B%y-%Hh%Mm%Ss`.tar.bz2 `basename $(PWD)`
On peut changer le contenu de la variable PROJET pour changer le nom de l'executable.
Quelques explications :
- La fonction wildcard permet de sélectionner tout les fichier sources
- Un @ signifie que la commande ne sera pas affichée
- On utilise une variable comme cela : $(VAR)
- Des regles générique sont déclarée à l'aide des %.o
- OBJ= $(SRC:.c=.o) génére le liste des fichier objet
- Quelques variables prédéfinies :
$@ Le nom de la cible $< Le nom de la première dépendance $^ La liste des dépendances $? La liste des dépendances plus récentes que la cible $* Le nom du fichier sans suffixe
1 commentaire:
Je réalise de temps quelques changements, si cela vous intéresse, envoyer moi un petit mail.
Enregistrer un commentaire