Makefile¶
Un makefile
est un fichier de configuration pour le programme make
. Ce dernier contient des instructions pour compiler un ou plusieurs programmes.
Pourquoi utiliser make
plutôt qu'un script bash? Parce que make
va recompiler seulement les parties qui ont été modifées plutôt que tous les fichiers ce qui sauve du temps sur les gros projets.
Voici un exemple d'un fichier pour compiler un programme C++ portant le nom progC. De plus, les options nécessaires pour utiliser la librairie CPLEX sont présentes.
Tout d'abord, vous remarquerez qu'il y a le signe dièse (#) au tout début de certaines lignes. Ce caractère indique à make
que la ligne est un commentaire et qu'elle ne doit pas être prise en considération.
Les lignes ou il y a un mot suivi du symbole =
sont des affectations de variables. Ces variables peuvent être définies et utilisées plus tard avec la syntaxe $(VARIABLE)
.
Par exemple, à la ligne 1, la variable CFLAGS
est définie et à la ligne 8, on utilise cette variable. Cela permet de changer les options sans avoir à faire des modifications sur plusieurs lignes du fichier. Par exemple, on peut mettre en commentaire la ligne 1 et enlever le commentaire de la ligne 2 et les options de compilation seront modifiées pour compiler en mode de débogage pluôt qu'optimisé.
La variable CFLAGS
définie les options générales de compilation. CPPFLAGS
contient des options spécifiques au préprocesseur C++, dans ce cas-ci des options dont CPLEX a besoin. La variable CXX définie le nom du programme à utiliser pour compiler un programme C++.
Un fichier makefile a des règles de base concernant sa forme:
cible: dependance commande
Avant chaque commande il y a un TAB (caractère de tabulation).
Le programme make
est utilisé pour interpréter et exécuter les instructions du fichier Makefile
.
Voici la sortie à l'écran de l'invocation de la commande make
make
g++ -Wall -O -DNDEBUG -DIL_STD -c progC.cpp
g++ -Wall -O -o progC progC.o progC2.o -lm -lilocplex -lconcert -lcplex -lpthread
Le résultat de ces instructions est que le programme progC
a été produit. Si vous utilisez make
de nouveau, rien ne se produira puisque le code source n'a pas été modifié. Vous aurez un message similaire à:
make: Rien à faire pour « progC ».
Pour forcer une recompilation, vous pouvez spécifier la cible clean
et recompiler.
make clean
make