Préprocesseur
- Possibilité d'inclure dans le code Fortran des lignes destinées au préprocesseur du langage C.
- Le préprocesseur passe avant la compilation proprement dite. Il filtre des lignes de texte ou remplace des chaînes de caractères.
Exemples
#ifdef HAVE_MPI
use mpi_f08
#endif
Une option de compilation dit si la "macro" HAVE_MPI est définie ou non.
integer, parameter:: wp = CPP_WP ! working precision for real type
real(wp) ...
Une option de compilation dit par quoi la macro CPP_WP doit être remplacée.
Impact sur le système de compilation
La possibilité d'utiliser le préprocesseur ne change presque rien au système de compilation. Essentiellement, la question se règle via les suffixes des noms de fichiers et des options de compilation supplémentaires.
Le suffixe .F
(ou .F90
) au lieu de .f
(ou .f90
) indique au
compilateur que le fichier doit passer par le préprocesseur.
Si le programme est constitué d'un mélange de fichiers .f
et .F
alors la création de la liste des objets par :
objects := $(sources:.f=.o)
ou bien :
objects := $(sources:.F=.o)
ne marche plus. Utiliser les fonctions addsuffix
et basename
de
make
:
objects := $(addsuffix .o, $(basename ${sources}))
Options de définition de macros
make
reconnaît la variable CPPFLAGS
comme contenant les options à
passer au préprocesseur. Cf. dans la base de données de make
la
règle %.o: %.F
et la variable compile.F
, à comparer à %.o: %.f
et la variable compile.f
.
L'option définissant une macro est (probablement tous les
compilateurs) -D
. Exemples :
-DHAVE_MPI -DCPP_WP='kind(0.)'
makedepf90
a aussi l'option -D
. Il suffit donc en général de passer
${CPPFLAGS}
à makedepf90
.