Outils pour utilisateurs

Outils du site


playground:mon_premier_makefile

Voici un exemple typique & fonctionnel d'un fichier makefile conçu pour un programme C++ pourtant le nom progC. De plus, il comporte les variables nécessaires au fonctionnement avec CPLEX (-lm -lilocplex -lconcert -lcplex -lpthread).

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 la ligne. Le hashtag indique au compilateur de ne pas lire cette ligne. Donc, ce qui suit le hashtag sera considéré comme un commentaire. L'instruction CFLAGS=-Wall -O, indique d'afficher tout les avertissements rencontrer par CPLEX. L'instruction CPPFLAGS=-DNDEBUG -DIL_STD, est ajouter afin que CLPEX initialise les variables (NDEBUG et IL_STD). -D défini la variable NDEBUG qui fait en sorte que CLPEX ne produise pas des lignes de débogage inutiles. -D IL_STD ajoute les libraires standard nécessaire au traitements de C/C++ par CPLEX.

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
playground/mon_premier_makefile.txt · Dernière modification: 2014/07/02 13:30 de admin