Suivez-nous sur X
|
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z,
ALL
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
A propos d'Obligement
|
|
David Brunet
|
|
|
|
En pratique : Utilisation de base de Lmk 5.10
(Article écrit par Frédéric Mazué et extrait d'Amiga News Tech - mai 1991)
|
|
Dans le remarquable environnement de développement du SAS
se trouve un utilitaire que peu utilisent (j'ai fait un sondage auprès d'au moins deux personnes !) par manque de
connaissances de ses possibilités. Pourtant voilà un programme bien agréable pour faciliter la vie des fainéants.
Je veux bien entendu parler de Lmk. "Mais à quoi peut-il bien servir", se demandent tous les lecteurs en coeur. Eh
bien cela sert à compiler et relier d'un coup un ou plusieurs programmes C, sans s'occuper de rien. Autrement dit,
finies les fastidieuses saisies de commandes de compilations et d'édition de liens depuis le CLI, on peut enfin
aller tranquillement boire un café pendant que l'Amiga travaille.
Lmk, dans l'environnement SAS 5.10, peut être appelé par son nom depuis le CLI ou depuis le Workbench.
En ce qui concerne le lancement depuis le Workbench, vous verrez qu'il n'existe pas d'icône nommée
"Lmk". En fait, il faut cliquer sur l'icône "Build", ce qui a finalement pour effet de d'invoquer Lmk.
C'est un malin
Quelque soit la façon dont Lmk est lancé, tous les sources présents dans le répertoire courant
sont compilés et reliés ensemble suivant les options par défaut définies dans le fichier SASCOPTIONS,
qui doit siéger dans le tiroir "Preferences" de votre Workbench.
Si vous faites quelques essais, vous constaterez que Lmk est un gros malin car il ne compile que
les sources qui ne l'ont pas déjà été, où qui viennent seulement d'être modifiés. Si vous voulez
forcer la recompilation de tous les sources, il faut dans ce cas appeler Lmk depuis le CLI avec
l'option adaptée, c'est-à-dire :
Mais ceci, déjà agréable en soit, est fort peu de choses par rapport à ce qu'il est possible de
faire dès que l'on crée un "makefile".
Le makefile
C'est un fichier texte qui contient toutes les commandes que Lmk se chargera de faire ingurgiter
au compilateur et à l'éditeur de liens. Bien sûr, il y a une syntaxe à respecter, mais d'abord
le nom du fichier lui-même a son importance. Trois possibilités :
- lmkfile
- prout.lmk (fichier quelconque avec l'extension .lmk)
- makefile
Lorsque Lmk est lancé, les fichiers sont recherchés dans le répertoire courant, suivant selon
l'ordre ci-dessus. Ce n'est que si aucun fichier n'est trouvé que les options du SASCOPTIONS
sont en dernier recours utilisées.
Un exemple de makefile
Commençons par quelque chose de très simple afin de nous familiariser.
Quelques petites explications s'imposent :
- La première ligne est un commentaire. On peut en mettre autant que l'on veut à condition
qu'ils commencent en début de ligne et par le signe dièse (#).
- La deuxième ligne "prog: prog.o" signifie à Lmk que l'exécutable "prog" dérivera de l'objet "prog.o".
- Ensuite vient la commande pour relier proprement dite. Attention, dans la notice du SAS est
précisé que cette ligne doit commencer par un espace. C'est faux, il en faut deux au moins.
Nobody's perfect ! Passons...
- Ensuite, la ligne "prog.o: prog.c" signifie que l'objet "prog.o" dérivera du source "prog.c".
- Et enfin, la commande de compilation qui devra, vous l'aviez déjà compris, elle aussi débuter par
deux espaces au moins.
Allons plus loin
En effet, dans l'exemple précédent n'est utilisé qu'un seul source. Un esprit chagrin comme le vôtre,
ô lecteur adulé, peut encore dire que finalement ça ne valait pas le coup de perdre son temps à créer
un makefile pour si peu. C'est vrai, mais Si vous êtes un programmeur averti, vous êtes organisé et
vous aimez ranger les sources appartenant à un même projet dans un répertoire spécifique et fractionner
votre source en plusieurs morceaux pour des questions de clarté et de commodité. De plus, vous n'avez
rien à faire des fichiers objets produit par le compilateur et vous reprendriez bien un deuxième café...
Voyez plutôt :
Vous voulez compiler d'un coup les programmes "essais" et "essai1.c" dont les sources sont rangés
dans les répertoires respectifs "sources" et "sources1". L'exemple ci-dessus fait tout cela,
et vous vous retrouvez en fin de compte avec les programmes exécutables "essai" et "essai1"
dans le répertoire courant.
Ceci s'interprete comme ceci : Lmk voit où le source se situe et passe une directive include
au compilateur, afin que celui-ci puisse trouver le fichier et ainsi de suite.
En plus, et c'est extrêmement sympathique, vous avez vu qu'il est parfaitement possible d'introduire
des commandes AmigaDOS dans un makefile. C'est ce qui a été fait pour effacer les objets produits.
Il n'y a déjà plus beaucoup de limites à ce qu'il est possible de trafiquer grâce à cette possibilité.
Mais tout de suite, nous allons éliminer un problème auquel vous risquez de vous heurter. Vous voulez
relier un programme comme suit :
Cette commande, que l'on pourrait taper d'un seul jet dans le CLI, est trop longue pour tenir sur
une seule ligne. Or, il n'est pas possible, dans un makefile, d'aller simplement à la ligne car pour
Lmk, chaque début de ligne correspond implicitement à une commande. Pour résoudre ce problème,
nous utiliserons le caractère barre oblique inversée (\), la commande devenant :
Ce qui est tout de même plus clair.
Imaginons maintenant qu'un programme "prog.c" ait besoin d'un fichier de données nommé "data.h",
par exemple. Vous pouvez bien sûr écrire dans le source "prog.c" la directive "#include <data.h",
mais il est plus pratique de faire ainsi dans le makefile :
...et l'inclusion du fichier data.h se fera automatiquement.
Toujours plus
Bon d'accord, il y a d'éternels mécontents parmi vous qui trouvent qu'il est bien fastidieux
d'écrire à chaque fois la commande de compilation dans le makefile. c'est pour vous que les
macros existent. Voici un exemple de ce qu'il est possible de faire avec les macros :
Vous l'avez compris, les macros peuvent être utilisées pour tout ce que l'on veut :
- Options de compilation.
- Spécification de répertoire.
- Regroupement d'objet.
- Tout ce qui peut vous passer par la tête !
Je pense que bon nombre d'entre vous ont déjà découvert beaucoup de choses à propos de Lmk,
mais je ne vous quitterai pas sans vous montrer comment il est possible de définir un règle
de transformation sources-objets. L'exemple ci-dessus devient :
Vous l'aurez compris, la ligne...
...définit une règle de compilation par défaut de tous les sources, ce qui permet de raccourcir
sensiblement le makefile et n'empêche de toute façon pas de forcer une compilation particulière
avec une ligne de commande spécifique.
Voilà. Le but de cet article était de vous montrer quelques-unes des possibilités de l'hyper-puissant
Lmk, mais nous sommes très loin de ses limites, comme vous pourrez vous en rendre compte maintenant
que vous vous y êtes familiarisé, en épluchant la notice. Décidément le SAS est bien le meilleur
compilateur C sur Amiga !
|