Systèmes Informatiques

Année 2004 - 2005
 

TP4
 


Voici un document français sur les principales règles du Makefile.

Créez un répertoire SYSTEME_UNIX/TP4 et enregistrez-y les fichiers suivants :
fichier1, fichier2, fichier3, Makefile
 

1)   A la main, compilez le code fortran et créez l'exécutable
      Utilisation de la commande touch

- f90 -c *.f90
- f90 *.o -o alea


- touch <fichier>
    permet de changer la date du fichier, et donc oblige make à recompiler ce fichier.


2)   Que fait la  commande make ?
      Que fait la commande make clean ?

    make lit le fichier Makefile et exécute les instructions qu'il contient. La cible par défaut est la première, puis il exécute "en remontant" les dépendances.

    make clean efface les fichiers objets (*.o) et les fichiers temporaires d'emacs (*~)




3)   A partir du fichier Makefile, créez un fichier Makefile2
      dans lequel vous définissez une macro de substitution OBJS pour les points objets

OBJS= main.o pdscal.o addition.o

et remplacer ces .o par $(OBJS) dans le Makefile.

Attention dans un fichier Makefile de bien respecter la syntaxe

cible: dépendance
<tabulation>commande à exécuter


Si vous le mettez pas la tabulation, make est perdu !

4)   A partir du fichier Makefile2, créez un fichier Makefile3 et
          -  avec le caractère @ faites en sorte que les commandes exécutées
              par make n'apparaissent pas (tapez @ en début de commande)
          -  avec la commande echo, affichez du texte à la place des résultats des commandes
              (echo chaine affiche la chaîne chaine à l'écran)

Remarque : @ doit se placer après la tabulation


5)   A partir du fichier Makefile3, créez un fichier Makefile4
      et avec les macros $@ et $< remplacez le maximum de texte dans ce fichier

$@ remplace la cible :

alea: $(OBJS)

    f90 $(OBJS) -o $@

$< remplace la dépendance

main.o: main.f90
    f90 -c $<

NB : $< ne fonctionne pas sur lebowski avec make, mais fonctionne avec gmake (GNU make)

6)   Créez un fichier Makefile5
      en remplaçant le maximum de texte par des macros

OBJS: main.o pdscal.o addition.o
CC=f90

alea: $(OBJS)
    $(CC) $(OBJS) -o $@

.f90.o:
    $(CC) -c $<