Changes between Version 31 and Version 32 of ToolsCourseTp1


Ignore:
Timestamp:
Sep 18, 2008, 1:48:25 PM (16 years ago)
Author:
cobell
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • ToolsCourseTp1

    v31 v32  
    294294Vous ferez attention à bien répondre au question posées ici dans le compte rendu, vous y inclurez les différents résultats obtenus surface/temps/optimisation).
    295295Vous ferez également attention à joindre les différents Makefile créés de façon à ce que la commande '''make''' effectue les différentes étapes de ce TP de A à Z.
     296
     297= 4. Annexe : Makefile =
     298
     299  == 4.1 Introduction ==
     300
     301Le flot de conception proposé par la chaîne de CAO Alliance se décompose en plusieurs étapes.
     302Chaque étape est réalisée par un outil CAO, et les différents outils communiquent entre eux par des fichiers.
     303
     304Les dépendances de données entre les différentes étapes sont donc matérialisées par des dépendances entre fichiers.
     305L'outil '''make''' de UNIX permet de décrire ces dépendances, et
     306donc d'automatiser l'enchaînement des étapes de conception.
     307
     308Le fichier Makefile est un ''script'' décrivant les dépendances, dont l'exécution est lancée par la commande ''make''.
     309
     310  == 4.2 Principe de base : Les Règles ==
     311
     312Un Makefile est un fichier contenant une ou plusieurs règles traduisant les dépendances entre les actions et les fichiers.
     313
     314Voici une règle type Makefile :
     315{{{
     316#Rq: chaque commande doit être précédée d’une tabulation
     317cible1 : dépendance1 dépendance2 ....
     318    commande_X
     319    commande_Y
     320}}}
     321
     322Les dépendances et cibles représentent, en général, des fichiers.
     323Seule la première régle  du Makefile est examinée.
     324Les règles suivantes sont ignorées si elles ne sont pas impliquées par la première.
     325Si certaines dépendances d'une règle X sont elles-mêmes des règles dans le Makefile alors ces dernières seront examinées avant la règle X appelante.
     326Pour chaque règle X examinée, si au moins une de ses dépendances est plus récente que sa cible alors les commandes de la règle X seront exécutées.
     327
     328Remarque : les commandes servent généralement à produire la cible (i.e un nouveau fichier).
     329Une cible peut ne pas représenter un fichier. Dans ce cas, les commandes de cette règle seront toujours exécutées.
     330
     331  == 4.3 Règles de modèles ==
     332
     333Ces règles sont plus polyvalentes car vous pouvez spécifier des règles de dépendance plus complexes.
     334Une règle de modèle ressemble à une règle normale, sauf qu'un symbole (%) apparaît dans le nom de la cible.
     335Les dépendances emploient également (%) pour indiquer la relation entre les noms de dépendance et le nom de la cible.
     336La règle de modèle suivante spécifie comment tous les fichiers vst sont formés à partir des vbe.
     337{{{
     338#exemple de règle pour la synthèse
     339%.vst : %.vbe
     340    boog $*
     341}}}
     342
     343  == 4.4 Définitions de variables ==
     344
     345On peut définir des variables en n'importe quel endroit du fichier Makefile, mais une écriture lisible nous amène à les définir en début de fichier.
     346
     347{{{
     348#définitions de variables
     349
     350MY_COPY = cp -r
     351MY_NUM = 42
     352MY_STRING = "hello"
     353
     354Elles sont utilisables à n'importe quel endroit du Makefile. Elles doivent être précédées du caractère '''$'''
     355
     356#utilisation d’une variable dans une règle
     357
     358copie:
     359    ${MY_COPY} digicode.vbe tmp/
     360}}}
     361
     362
     363  == 4.5 Variables prédéfinies ==
     364
     365 * '''$@''' Nom complet de la cible.
     366 * '''$*''' Nom du fichier cible sans l'extension.
     367 * '''$<''' Nom du premier fichier dépendant.
     368 * '''$+''' Noms de tous les fichiers dépendants avec des dépendances doubles répertoriées dans leur ordre d'apparition.
     369 * '''$^''' Noms de tous les fichiers dépendants. Les doubles sont retirés.
     370 * '''$?''' Noms de tous les fichiers dépendants plus récents que la cible.
     371 * '''$%''' Nom de membre pour des cibles qui sont des archives (langage C).
     372   Si, par la cible est libDisp.a(image.o), $% est image.o et $@ est libDisp.a.