Changes between Initial Version and Version 1 of ToolsTpMakefile


Ignore:
Timestamp:
Sep 27, 2007, 4:46:52 PM (17 years ago)
Author:
anne
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • ToolsTpMakefile

    v1 v1  
     1= Le Makefile =
     2
     3==  Comment gérer les dépendances de tâches ==
     4
     5
     6La synthèse sous Alliance se décompose en plusieurs outils s'exécutant chronologiquement
     7sur un flux de données. Chaque outil possède ses propres options donnant
     8des résultats plus ou moins adaptés suivant l'utilisation que l'on veut faire du circuit.
     9
     10Les dépendances de données dans le flux sont matérialisées dans la réalité par une
     11pendance de fichier. Le fichier Makefile exécuté à l'aide de la commande make permet
     12gérer ces dépendances. Différents exemples de fichiers seront fournis durant le TP.
     13
     14Ce TP n'étant pas un cours sur le Makefile, nous nous limiterons à expliquer l'usage qui
     15est fait dans les exemples fournis.
     16
     17== 1 Principe de base : Les Règles ==
     18
     19Un Makefile est un fichier contenant une ou plusieurs règles traduisant les dépendances
     20entre les actions et les fichiers.
     21
     22Voici une règle type Makefile :
     23{{{
     24#Rq: chaque commande doit être précédée d’une tabulation
     25cible1 : dépendance1 dépendance2 ....
     26    commande_X
     27    commande_Y
     28}}}
     29
     30Les dépendances et cibles représentent, en général, des fichiers.
     31Seule la première régle  du Makefile est examinée. Les
     32règles suivantes sont ignorées si elles ne sont pas impliquées par la première.
     33Si certaines dépendances d'une règle X sont elles-mêmes des règles dans le Makefile
     34alors ces dernières seront examinées avant la règle X appelante.
     35Pour chaque règle X examinée, si au moins une de ses dépendances est plus récente que
     36sa cible alors les commandes de la règle X seront exécutées. Remarque : les commandes
     37servent généralement à produire la cible (i.e un nouveau fichier).
     38Une cible peut ne pas représenter un fichier. Dans ce cas, les commandes de cette règle
     39seront toujours exécutées.
     40
     41== 2 Règles de modèles ==
     42
     43Ces règles sont plus polyvalentes car vous pouvez spécifier des règles de dépendance
     44plus complexes. Une règle de modèle ressemble à une règle normale, sauf qu'un
     45symbole (%) apparaît dans le nom de la cible. Les dépendances emploient également
     46(%) pour indiquer la relation entre les noms de dépendance et le nom de la cible. La
     47règle de modèle suivante spécifie comment tous les fichiers vst sont formés à partir des
     48vbe.
     49
     50{{{
     51#exemple de règle pour la synthèse
     52%.vst : %.vbe
     53    boog $*
     54}}}
     55
     56== 3 Définitions de variables ==
     57
     58On peut définir des variables en n'importe quel endroit du fichier Makefile, mais
     59une écriture lisible nous amène à les définir en début de fichier.
     60
     61{{{
     62#définitions de variables
     63
     64MY_COPY = cp -r
     65MY_NUM = 42
     66MY_STRING = "hello"
     67
     68Elles sont utilisables à n'importe quel endroit du Makefile. Elles doivent être précé-
     69dées du caractère '''$'''
     70
     71#utilisation d’une variable dans une règle
     72
     73copie:
     74    ${MY_COPY} digicode.vbe tmp/
     75}}}
     76
     77
     78== 4 Variables prédéfinies ==
     79
     80 * $@ Nom complet de la cible.
     81 * $* Nom du fichier cible sans l'extension.
     82 * $< Nom du premier fichier dépendant.
     83 * $+ Noms de tous les fichiers dépendants avec des dépendances doubles répertoriées
     84   dans leur ordre d'apparition.
     85 * $^ Noms de tous les fichiers dépendants. Les doubles sont retirés.
     86 * $ ? Noms de tous les fichiers dépendants plus récents que la cible.
     87 * $% Nom de membre pour des cibles qui sont des archives (langage C). Si, par
     88
     89=== exemple ===
     90
     91La cible est libDisp.a(image.o), $% est image.o et $@ est libDisp.a.