Page suivantePage précédenteTable des matières

5. Programmer

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.

5.1 Fortran

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.

5.2 Utiliser 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.

5.3 Scripts shell

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."

5.4 C

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.


Page suivantePage précédenteTable des matières