Bonjour !

J'ai voulu essayer d'utiliser make pour certains de mes projets en Pascal. Je vous montre ce que j'ai fait, au cas où cela intéresserait quelqu'un, et aussi dans le but de recevoir éventuellement des conseils ou des suggestions.

Je me suis appuyé sur ce tutoriel : Introduction à Makefile

J'ai fait cela sous Linux, mais sous Windows cela fonctionne aussi, à condition que l'outil make soit installé.

J'ai donc écrit plusieurs versions d'un fichier Makefile, pour un programme qui s'appelle alouette (mais peu importe, vous remplacerez ce nom par celui de n'importe quel autre programme).

Première version du fichier Makefile :

Code Makefile : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
alouette: alouette.pas
	mkdir -p units
	fpc -FcUTF8 -B -Mobjfpc -Sah -FUunits alouette.pas -oalouette -dDEBUG -ghl
 
clean:
	rm -f units/*.o
	rm -f units/*.ppu

Les fichiers Makefile et alouette.pas se trouvent dans le même dossier. J'ouvre donc un terminal dans ce dossier, et je tape make, pour compiler le programme, puis make clean pour supprimer les unités compilées.

Deuxième version, où l'on utilise des variables (voyez le tutoriel) :

Code Makefile : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
PC=fpc
PFLAGS=-FcUTF8 -B -Mobjfpc -Sah -FUunits -dDEBUG -ghl
 
alouette: alouette.pas
	mkdir -p units
	$(PC) $(PFLAGS) alouette.pas -oalouette
 
clean:
	rm -f units/*.o
	rm -f units/*.ppu

Troisième version, avec des "variables internes" :

Code Makefile : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
PC=fpc
PFLAGS=-FcUTF8 -B -Mobjfpc -Sah -FUunits -dDEBUG -ghl
 
alouette: alouette.pas
	mkdir -p units
	$(PC) $^ -o$@ $(PFLAGS)
 
clean:
	rm -f units/*.o
	rm -f units/*.ppu

Quatrième version, où l'on définit une variable nommée DEBUG, afin de pouvoir choisir le mode de compilation :

Code Makefile : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PC=fpc
DEBUG=true
ifeq ($(DEBUG),true)
	PFLAGS=-FcUTF8 -B -Mobjfpc -Sah -FUunits -dDEBUG -ghl
else
	PFLAGS=-FcUTF8 -B -Mobjfpc -Sh -FUunits -dRELEASE -CX -XX -Xs
endif
 
alouette: alouette.pas
	mkdir -p units
	$(PC) $^ -o$@ $(PFLAGS)
 
clean:
	rm -f units/*.o
	rm -f units/*.ppu

Pour compiler en mode RELEASE, on utilisera la commande make DEBUG=false. En effet, la valeur donnée dans la ligne de commande est prioritaire sur celle qui est écrite dans le fichier.

Dernière version, pour pouvoir compiler au choix en 32 ou en 64 bits :

Code Makefile : Sélectionner tout - Visualiser dans une fenêtre à part
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
PC=fpc
PC32=/home/roland/Applications/freepascal32/fpc
PC64=/home/roland/Applications/freepascal64/fpc
DEBUG=true
ifeq ($(DEBUG),true)
	PFLAGS=-FcUTF8 -B -Mobjfpc -Sah -FUunits -dDEBUG -ghl
else
	PFLAGS=-FcUTF8 -B -Mobjfpc -Sh -FUunits -dRELEASE -CX -XX -Xs
endif
 
alouette: alouette.pas
	mkdir -p units
	$(PC) $^ -o$@ $(PFLAGS)
 
alouette32: alouette.pas
	mkdir -p units
	$(PC32) $^ -o$@ $(PFLAGS)
 
alouette64: alouette.pas
	mkdir -p units
	$(PC64) $^ -o$@ $(PFLAGS)
 
clean:
	rm -f units/*.o
	rm -f units/*.ppu

Si l'utilisateur tape simplement make, la compilation se fera avec le compilateur installé sur la machine. S'il tape make alouette32, c'est le compilateur 32 bits qui sera appelé.

Voilà. Qu'en pensez-vous ?