Programmer sous Linux est beaucoup plus agréable : il existe un grand
nombre d'outils qui rendent la programmation plus facile et plus rapide. Par
exemple, la torture qu'est le cycle édition, sauvegarde, sortie de l'éditeur,
compilation, réédition, etc. peut être raccourci en utilisant des éditeurs
comme emacs
ou jed
, comme nous l'avons vu au dessus.
Il n'y a pas de réelle différence pour le fortran, mais sachez qu'au
moment où j'écris ces lignes, les compilateurs (libres) ne sont pas
totalement compatibles avec ceux de VMS ; attendez-vous à quelques problèmes
mineurs (en fait, le compilateur de VMS utilise des extensions qui ne sont pas
standard). Jetez un oeil à /usr/doc/g77/DOC
ou
/usr/doc/f2c/d2c.ps
pour plus de détails.
Votre administrateur a sans doute installé soit le compilateur natif g77
(bien, mais, au jour de la version 0.5.21, toujours pas parfaitement compatible
avec le Fortran de DEC), soit le traducteur de Fortran en C, f2c
, et un
des ses front-ends qui font de lui une imitation de compilateur natif. D'après
mon expérience, le paquetage yaf77
est celui qui donne les meilleurs
résultats.
Pour compiler un source en Fortran avec g77
, éditez le et sauvez le avec
l'extension .f
, et faites
$ g77 monprog.f
Cela va créer par défaut un exécutable appelé a.out
(vous n'avez pas à
effectuer les liens). Pour donner à l'exécutable un nom différent et faire
quelques optimisations :
$ g77 -O2 -o monprog monprog.f
Méfiez-vous des optimisations ! Demandez à votre administrateur système de lire la documentation fournie avec le compilateur et de vous dire s'il y a des problèmes.
Pour compiler une sous-routine :
$ g77 -c masub.f
Un fichier masub.o
sera créé. Pour lier cette sous-routine à un
programme, vous devrez faire
$ g77 -o monprog monprog.f masub.o
Si vous avez plusieurs sous-routines externes et que vous voulez créer une bibliothèque, faites
$ cd sousroutines/
$ cat *f> mabib.f ; g77 -c mabib.f
Le fichier mabib.o
créé pourra alors être lié à vos programmes.
Pour finir, pour lier une bibliothèque externe appelée, disons,
liblambda.so
, utilisez
$ g77 -o monprog monprog.f -llambda
Si vous avez f2c
, vous n'aurez qu'à utiliser f77
ou fort77
à la place de g77
.
Un autre outil de programmation utile est make
. Il est décrit ci-dessous.
make
make
est un outil pour gérer la compilation de programmes divisés en
plusieurs fichiers sources.
Supposons que vous ayez des fichiers sources contenant vos routines appelés
fichier_1.f, fichier_2.f et fichier_3.f
, et un fichier source
principal qui utilise ces routines appelé monprog.f
. Si vous compilez
votre programme à la main, quand vous modifierez un fichier source vous allez
devoir chercher quel fichier dépend de quel fichier, et les recompiler en
tenant compte des dépendances.
Plutôt que de devenir fou, je vous propose d'écrire un makefile. C'est un fichier texte qui contient les dépendances entre les sources : quand un source est modifié, seuls les sources qui dépendent du fichier modifié seront recompilées.
Dans notre cas, le makefile ressemblerait à ceci :
# Voici le Makefile # Attention : appuyez sur la touche tabulation quand « <TAB> » # est écrit ! C'est très important : n'utilisez pas d'espace à la place. monprog: monprog.o fichier_1.o fichier_2.o fichier_3.o <TAB>g77 -o monprog monprog.o fichier_1.o fichier_2.o fichier_3.o # monprog dépend de quatre fichiers objets monprog.o: monprog.f <TAB>g77 -c monprog.f # monprog.o dépend de son fichier source fichier_1.o: fichier_1.f <TAB>g77 -c fichier_1.f # fichier_1.o dépend de son fichier source fichier_2.o: fichier_2.f fichier_1.o <TAB>g77 -c fichier_2.f fichier_1.o # fichier_2.o dépend de son fichier source et d'un fichier objet fichier_3.o: fichier_3.f fichier_2.o <TAB>g77 -c fichier_3.f fichier_2.o # fichier_3.o dépend de son fichier source et d'un fichier objet # fin du Makefile
Enregistrez ce fichier sous le nom Makefile
et tapez make
pour
compiler votre
programme. Vous pouvez aussi l'appeler monprog.mak
et taper make -f
monprog.mak
. Et bien sûr, si vous voulez en savoir plus : info make
.
Les scripts shell sont les équivalents des fichiers de commandes de VMS et, pour changer, sont beaucoup plus puissants.
Pour écrire un script, tout ce que vous avez à faire est d'écrire un fichier au
format ASCII contenant les commandes, l'enregistrer et le rendre exécutable
(chmod +x fichier
). Pour le lancer, tapez son nom (précédé de ./
s'il n'est pas dans le path).
Écrire des scripts avec bash
est un sujet tellement vaste qu'il
nécessiterait un livre entier, et je ne ne vais pas m'attarder sur le
sujet. Je vais juste vous donner un exemple plus ou moins compréhensible et, je
l'espère, utile, à partir duquel vous pourrez comprendre quelques règles de
base.
#!/bin/sh # exemple.sh # Je suis un commentaire. # Ne modifiez pas la première ligne, elle doit être présente. echo "Ce système est : `uname -a`" # utilise la sortie de la commande echo "Mon nom est $0" # variable interne echo "Vous m'avez donné les $# paramètres suivants : "$* echo "Le premier paramètre est : "$1 echo -n "Quel est votre nom ? " ; read votre_name echo remarquez la différence : "Salut $votre_name" # cité avec " echo remarquez la différence : 'Salut $votre_name' # cité avec ' REPS=0 ; FICHIERS=0 for fichier in `ls .` ; do if [ -d ${fichier} ] ; then # si le fichier est un répertoire REPS=`expr $REPS + 1` # REPS = REPS + 1 elif [ -f ${fichier} ] ; then FICHIER=`expr $FICHIER + 1` fi case ${fichier} in *.gif|*jpg) echo "${fichier}: fichier graphique" ;; *.txt|*.tex) echo "${fichier}: fichier texte" ;; *.c|*.f|*.for) echo "${fichier}: fichier source" ;; *) echo "${fichier}: fichier quelconque" ;; esac done echo "Il y a ${REPS} répertoires et ${FICHIERS} fichiers" ls | grep "ZxY--!!!WKW" if [ $? != 0 ] ; then # valeur de sortie de la dernière commande echo "ZxY--!!!WKW n'a pas été trouvé" fi echo "Ça suffit... tapez 'man bash' si vous voulez plus d'informations." echo "Note du traducteur : 'info bash' est plus complet."
Linux est un excellent environnement pour la programmation en C. Si vous
connaissez le C, voici quelques conseils pour vous débrouiller sous Linux. Pour
compiler le célèbre hello.c
vous utiliserez le compilateur gcc
, qui
est standard dans le monde de Linux et qui a la même syntaxe que g77
:
$ gcc -O2 -o hello hello.c
Pour lier une bibliothèque à un programme, ajoutez l'option
-lbibliothèque
.
Par exemple pour lier la bibliothèque math et optimiser faites
$ gcc -O2 -o mathprog mathprog.c -lm
(L'option -lbibliothèque
force gcc
à lier la bibliothèque
/usr/lib/libbibliothèque.a
; ainsi -lm
lie /usr/lib/libm.a
.)
Quand votre programme est divisé en plusieurs fichiers sources, vous aurez
besoin
du programme make
décrit juste au dessus.
Vous pouvez obtenir de l'aide sur quelques fonctions de la libc dans la section 3 des pages man. Par exemple :
$ man 3 printf
Il existe beaucoup de bibliothèques disponible. Parmi les premières que vous
voudrez
probablement utiliser, il y a ncurses
, qui permet de gérer quelques effets
du mode texte et svgalib
pour faire du graphisme.