Compilation d'un programme à un seul fichier avec make

Même si make donne la pleine mesure de son utilité pour un programme à plusieurs fichiers, reprenons le cas d'un programme à un seul fichier.

The variables that make uses

FC: initials of Fortran compiler, that is the compiling command. Examples :

FC = gfortran

ou

FC = ifort

(Nota bene : les espaces de part et d'autre du signe égal n'ont pas d'importance dans le langage de make, à la différence d'un shell.)

FFLAGS: Fortran flags, those are compilation options.

Suffixe .f ou .f90 ?

Nous avons des fichiers au format libre. Quel suffixe choisir ?

Désaccord entre make et les compilateurs :

  • make sait traiter comme un grand les fichiers avec le suffixe .f et non .f90.
  • Les compilateurs interprètent en général .f comme format fixe.

Deux solutions :

La deuxième solution est la plus simple.

Manipulation 3

  • Créer un fichier GNUmakefile ne contenant que les lignes définissant FC et FFLAGS.
  • Compiler le programme trivial avec make. Par exemple :
make plouf

(sans suffixe) si votre source s'appelle plouf.f.

  • Ré-exécuter make plouf.
  • Modifier le source et ré-exécuter make plouf.

make plouf

Nota bene :

  • make affiche la commande de compilation qu'il a créée à partir du GNUmakefile :
$(FC) $(FFLAGS) plouf.f -o plouf
  • make utilise les suffixes. On lui demande de créer plouf et il voit qu'il existe un fichier plouf.f présent dans le répertoire : il comprend qu'on veut créer l'exécutable plouf à partir du source Fortran plouf.f.

  • make utilise les dates de modification des fichiers. It only compiles again when it is useful to do so, considering the modification dates of the source file and the corresponding executable file (if there is already one in the current directory). So if you type the command make plouf twice without modifying the source file in the meantime, you get the message:

make: `plouf' is up to date.
  • Les fichiers GNUmakefile et plouf.f doivent être présents dans le répertoire courant.

Cible dans le GNUmakefile

Possibilité de spécifier la cible, plouf, dans le GNUmakefile. Ajouter la ligne :

plouf:

La commande make tout court (sans argument après make) tente de créer ou mettre à jour la première cible rencontrée dans le GNUmakefile. Inutile alors d'écrire make plouf sur la ligne de commande.

Manipulation 4

  • Ajouter la cible dans le GNUmakefile.
  • Compiler en invoquant simplement make, sans argument.