Aller au contenu

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.

CFLAGS=-Wall -O
#CFLAGS=-Wall -g
CPPFLAGS=-DNDEBUG -DIL_STD
CXX=g++
OBJ=progC.o progC2.o

progC: $(OBJ)
    $(CXX) $(CFLAGS) -o progC $(OBJ)  -lm -lilocplex -lconcert -lcplex -lpthread

progC.o: progC.cpp
    $(CXX) $(CFLAGS) $(CPPFLAGS) -c progC.cpp

progC2.o: progC2.cpp
    $(CXX) $(CFLAGS) $(CPPFLAGS) -c progC2.cpp

clean:
    rm -f progC progC.o

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