Nous sommes le Ven 19 Avr, 2024 12:35
Supprimer les cookies

Traduction de la doc GNU Make

Mar 08 Sep, 2009 19:10

Salux !

J'en avais parlé dans un ancien thread http://forum.framasoft.org/viewtopic.php?f=93&t=32042 et je trouvais plus judicieux d'ouvrir un nouveau sujet pour plus de clarté. Si ça pose problème, dîtes-le moi je fusionnerai avec l'ancien.

C'est donc une proposition de Framabook, je me suis atellé à la traduction de GNU Make et je voulais vous proposer un extrait. Ce n'est pour l'instant qu'un premier jet, remplit de fautes en tous genres et de parties manquantes ou incompréhensibles.
À la suite de quoi je suis tout à fait prêt à discuter de l'intégrer dans la collection (ou pas) et, éventuellement, en faire part à GNU dans l'éventualité de devenir une traduction "officielle".

Le texte original est disponible à l'adresse suivante : http://www.gnu.org/software/make/manual/make.txt

J'ai déjà traduit les deux premiers chapitre et en suis à la section 4 chapitre 3. Note : les (" ") désignent des références à d'autres sections qu'il faudra compléter.

Voici les sections 1 & 2 chapitre 2 :
2 Introduction aux makefiles

Make a besoin d'un « makefile » pour lui indiquer quoi faire. Le plus souvent, le makefile explique à make comment compiler et lier un programme.

Dans ce chapitre, nous élaborerons un simple makefile qui décrit comment compiler et linker un éditeur de texte composé de huit fichiers source en C et trois fichiers d'en-tête. Le makefile peut donc indiquer à make comment exécuter diverses commandes explicitement invoquées (par exemple supprimer certains fichiers comme lors d'une opération de nettoyage). Pour un exemple de makefile plus complexe, voir « ».

Quand make recompile l'éditeur, chaque fichier source qui a été modifié doit l'être. Si un fichier d'en-tête a été changé, les fichiers source qui l'incluent doivent être compilés par sécurité. La compilation produit un fichier objet correspondant au fichier source. Enfin, si une compilation a eu lieu, tous les fichiers objets (nouvellement créés ou non) doivent être liés ensemble pour former le nouvel exécutable.


2.1 A quoi ressemble une règle

Un makefile simple est constitué de « règles » de la forme suivante :

CIBLE ... : PRE_REQUIS ...
COMMANDE
...
...

Une « cible » est généralement désignée par le nom d'un fichier généré par un programme ; par exemple des exécutables ou des fichiers objets. Une cible peut aussi être le nom d'une action comme 'clean' (« »).

Un « pré requis » est un fichier utilisé pour la création de la cible. Une cible dépend souvent de nombreux fichiers.

Une « commande » est une action que make doit accomplir. Une règle peut avoir à effectuer plus d'une commande, une par ligne. Note vous devez préfixer chaque ligne de commande par un caractère de tabulation ! (à traduire)

Usuellement une commande est une règle avec des pré requis qui va générer un fichier cible si l'un des pré requis change. Cependant, une règle qui définit des commandes concernant une cible n'a pas besoin de pré requis. Par exemple, la règle de nettoyage 'clean' n'a aucun pré requis.

Une « règle » explique donc quand et comment reconstruire certains fichiers qui sont nécessaires pour cette règle. Make prend en compte les commandes des pré requis pour créer ou mettre à jour la cible. « »

Un makefile peut contenir d'autres indications à la suite des règles, mais un makefile simple ne contient que des règles. Certaines règles peuvent sembler plus compliquées que celles montrées dans cet exemple, mais toutes suivent plus ou moins la même forme.


2.2 Exemple de makefile

Voici un exemple de makefile qui génère un exécutable 'edit' qui dépend de huit fichiers objets qui, à leur tour, dépendent de huit fichiers sources et de trois fichiers d'en-tête.

Dans cet exemple, tous les fichiers C incluent 'defs.h', mais seuls ceux concernant les commandes d'édition incluent 'command.h' et ceux concernant le buffer de l'éditeur incluent 'buffer.h'.

edit : main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
cc -o edit main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o

main.o : main.c defs.h
cc -c main.c
kbd.o : kbd.c defs.h command.h
cc -c kbd.c
command.o : command.c defs.h command.h
cc -c command.c
display.o : display.c defs.h buffer.h
cc -c display.c
insert.o : insert.c defs.h buffer.h
cc -c insert.c
search.o : search.c defs.h buffer.h
cc -c search.c
files.o : files.c defs.h buffer.h command.h
cc -c files.c
utils.o : utils.c defs.h
cc -c utils.c
clean :
rm edit main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o

Les longues lignes sont partagées en deux grâce à l'anti-slash ; ce qui fournit le même résultat mais rend la lecture plus facile.

Pour générer l'exécutable 'edit' par le biais du makefile, tapez :

make

Pour supprimer les fichiers exécutables et tous les fichiers objets grâce au makefile :

make clean

L'exécutable 'edit' et les fichiers objet 'main.o' et 'kbd.o' font partie des cibles de cet exemple. Les pré requis sont des fichiers comme 'main.o' ou 'defs.h'. En fait, chaque fichier '.o' est à la fois cible et pré requis. Parmis les commandes on trouve 'cc -c main.c' et 'cc -c kbd.c'.

Lorsque la cible est un fichier, il doit être recompilé ou re-'linké' si l'un de ces pré requis change. De plus, un pré requis lui-même cible doit être mis à jour en premier. Dans cet exemple, 'edit' dépend des huit fichiers objets ; le fichier 'main.o' dépend du fichier source 'main.c' et de l'en-tête 'defs.h'.

A la suite de la ligne décrivant une cible et ses pré requis sont définies la ou les commandes. Elles décrivent comment mettre à jour la cible et doivent commencer par une tabulation pour les différencier des autre lignes du makefile (Gardez à l'esprit que make ne sait absolument pas comment fonctionnent les commandes. C'est à vous de fournir les bonnes commandes de mise à jour de la cible.).

La cible 'clean' n'est pas un fichier mais plutôt le nom d'une action. En temps normal, vous ne souhaitez pas que cette action soit exécutée, 'clean' n'est dans aucun pré requis des autres règles. Par conséquent, make ne l'exécutera que si vous lui indiquez explicitement. Notez que cette cible n'a aucun pré requis, alors elle effectuera ses commandes seront exécutées dans tous les cas.

Les cibles qui ne sont liées à aucun fichier sont appelées 'phony targets'. « » pour plus d'informations à propos de ce type de cible. « » pour indiquer à make d'ignorer les erreurs causées par 'rm' ou toute autre commande.


Bonne lecture !
manudwarf

Messages : 8

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit