Outils pour utilisateurs

Outils du site


fr:programmation-makefile

Makefile

Un makefile est un fichier de configuration pour le programme make. Ce dernier contient des instructions pour compiler un ou plusieurs programmes.

Voici un exemple d'un fichier makefile pour compiler un programme C++ portant le nom progC. De plus, les options nécessaires pour utiliser la librairie CPLEX sont présentes.

Makefile
# Exemple de makefile pour un programme cplex en C++
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
# ^ TAB obligatoire en début de ligne
#                                             ----- librairies pour CPLEX ----------
 
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 hashtag (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.

L'instruction CFLAGS=-Wall -O, est une affectation à une variable. La variable CFLAGS aura la valeur -Wall -O. Plus tard, on peut utiliser cette variable avec la syntaxe $(CFLAGS). Dans le cas présent, cette variable est utilisée pour spécifier des options de compilation indiquant d'afficher plus d'avertissements de compilation et aussi d'optimiser le programme. L'instruction CPPFLAGS=-DNDEBUG -DIL_STD, est une autre affectation de variable. Cette variable est utilisée pour donner des paramètres au préprocesseur C++. Dans ce cas-ci, on indique de définir NDEBUG et IL_STD. Ces définitions sont nécessaires pour qu'un fichier utilisant CPLEX compile correctement.

CXX=g++, indique d'utiliser le compilateur g++. OBJ=progC.o progC2.o, ici on défini la variable OBJ comportera progC.o et 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
      
      
      
      

Voici le code source du fichier progC.cpp

C++
#include "progC2.h"
 
int main(int argc, char **argv)
{
  int  n;
 
  if (argc < 2)
    {
      printf("Usage: ./progC n \n");
      exit(1);
    }
 
  n = atoi(argv[1]);
 
  Fibonacci(n);
  return(1);
}

Voici le code source du fichier progC2.cpp

c++
#include "progC2.h"
/* Afficher la suite de Fibonacci du nieme nombre ou n est entree au clavier */
 
void Fibonacci(int n)
{
  int count, t1=0, t2=1, display=0;
  printf("Fibonacci Series: %d - %d - ", t1, t2); /* Afficher 2 premier nombres */
  count=2;    /* count=2 parce que les 2 premier nombres sont déjà affichés */
  while (count<n)
  {
      display=t1+t2;
      t1=t2;
      t2=display;
      ++count;
      printf("%d - ",display);
  }
  printf("\n");
}

Finalement, voici le code source du fichier .h (header)

c++
#include <cstdio>
#include <cstdlib>
#include <cmath>
 
void Fibonacci(int n);

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).

Pour l'invoquer le fichier makefile, nous devons taper make.

Voici la sortie standard (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

Voici les fichiers qui se retrouve dans votre répertoire suite à l'invocation de la commande make

 makefile  makefile~  progC  progC2.cpp  progC2.cpp~  progC2.h  progC2.h~  progC2.o  progC.cpp      progC.cpp~  progC.o
 

Voici une exécution du programme

   >./progC 14
   Fibonacci Series: 0 - 1 - 1 - 2 - 3 - 5 - 8 - 13 - 21 - 34 - 55 - 89 - 144 - 233 -
   
   

Voici l'invocation de make clean (défini plus haut dans notre fichier makefile)

   >make clean
   rm -f progC progC.o
fr/programmation-makefile.txt · Dernière modification: 2014/07/22 17:06 de admin