théoriquement :
- une cible est identifiée par ::
- une instruction est identifée par :
- une variable est identifée par un =
On peut donc avoir :
1 2 3 4 5 6
| #---------------------------------------------------
#
# Definiton des outils
#
#---------------------------------------------------
CC = /usr/bin/gcc |
(par exemple, sur unixoide)
1 2 3 4 5 6 7 8 9 10
| #---------------------------------------------------
#
# Definitions des chemins
#
#---------------------------------------------------
HOME_DIR = ..
SOURCE_DIR = ./
EXE_DIR = $(HOME_DIR)/bin
INCLUDE_DIR = $(SOURCE_DIR)/include
LIB_DIR = $(HOME_DIR)/lib/ |
1 2 3 4 5 6 7
| #---------------------------------------------------
#
# Options
#
#---------------------------------------------------
CFLAGS = -Wall -Wextra -I$(INCLUDE_DIR)# ...
LDFLAGS = -L$(LIB_DIR) -lm |
(CFLAGS est une variable par défaut)
1 2 3 4 5 6 7 8 9
|
#---------------------------------------------------
#
# Directives pour la compilation
#
#---------------------------------------------------
.c.o:
$(CC) $(CFLAGS) -c $< $(LDFLAGS) |
Avec une ligne de cible comme :
f2:: $(CC) $(SOURCE_DIR)/f2.c -o $(BIN_DIR)/f2
la cible all permet de ne pas donner de paramètre lorsque le makefile est appelé, et donc de taper "make" tout simplement. Par défaut il ira exécuter ce qu'il y a sous la cible all.
Pour compiler, il suffira donc de taper "make" au lieu de "make f2".
Ce qui permet de compiler tout un tas de choses d'un seul coup.
De même, on n'utilise pas de "mrproper", mais "clean" est une cible standard.
1 2 3
| clean::
cd $(LIB_DIR) ; rm -rf * ; cd $(BIN_DIR) ; rm -rf * ;
echo 'tout est nettoyé' |
Partager