Changes between Version 30 and Version 31 of ToolsCourseTp4


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

--

Legend:

Unmodified
Added
Removed
Modified
  • ToolsCourseTp4

    v30 v31  
    201201
    202202
    203 = 4 Annexe Le Makefile =
    204 
    205 ==  Comment gérer les dépendances de tâches ==
    206 
    207 
    208 La synthèse sous Alliance se décompose en plusieurs outils s'exécutant chronologiquement
    209 sur un flux de données. Chaque outil possède ses propres options donnant
    210 des résultats plus ou moins adaptés suivant l'utilisation que l'on veut faire du circuit.
    211 
    212 Les dépendances de données dans le flux sont matérialisées dans la réalité par une
    213 pendance de fichier. Le fichier Makefile exécuté à l'aide de la commande make permet
    214 gérer ces dépendances. Différents exemples de fichiers seront fournis durant le TP.
    215 
    216 Ce TP n'étant pas un cours sur le Makefile, nous nous limiterons à expliquer l'usage qui
    217 est fait dans les exemples fournis.
    218 
    219 == 4.1 Principe de base : Les Règles ==
    220 
    221 Un Makefile est un fichier contenant une ou plusieurs règles traduisant les dépendances
    222 entre les actions et les fichiers.
    223 
    224 Voici une règle type Makefile :
    225 {{{
    226 #Rq: chaque commande doit être précédée d’une tabulation
    227 cible1 : dépendance1 dépendance2 ....
    228     commande_X
    229     commande_Y
    230 }}}
    231 
    232 Les dépendances et cibles représentent, en général, des fichiers.
    233 Seule la première régle  du Makefile est examinée. Les
    234 règles suivantes sont ignorées si elles ne sont pas impliquées par la première.
    235 Si certaines dépendances d'une règle X sont elles-mêmes des règles dans le Makefile
    236 alors ces dernières seront examinées avant la règle X appelante.
    237 Pour chaque règle X examinée, si au moins une de ses dépendances est plus récente que
    238 sa cible alors les commandes de la règle X seront exécutées. Remarque : les commandes
    239 servent généralement à produire la cible (i.e un nouveau fichier).
    240 Une cible peut ne pas représenter un fichier. Dans ce cas, les commandes de cette règle
    241 seront toujours exécutées.
    242 
    243 == 4.2 Règles de modèles ==
    244 
    245 Ces règles sont plus polyvalentes car vous pouvez spécifier des règles de dépendance
    246 plus complexes. Une règle de modèle ressemble à une règle normale, sauf qu'un
    247 symbole (%) apparaît dans le nom de la cible. Les dépendances emploient également
    248 (%) pour indiquer la relation entre les noms de dépendance et le nom de la cible. La
    249 règle de modèle suivante spécifie comment tous les fichiers vst sont formés à partir des
    250 vbe.
    251 
    252 {{{
    253 #exemple de règle pour la synthèse
    254 %.vst : %.vbe
    255     boog $*
    256 }}}
    257 
    258 == 4.3 Définitions de variables ==
    259 
    260 On peut définir des variables en n'importe quel endroit du fichier Makefile, mais
    261 une écriture lisible nous amène à les définir en début de fichier.
    262 
    263 {{{
    264 #définitions de variables
    265 
    266 MY_COPY = cp -r
    267 MY_NUM = 42
    268 MY_STRING = "hello"
    269 
    270 Elles sont utilisables à n'importe quel endroit du Makefile. Elles doivent être précé-
    271 dées du caractère '''$'''
    272 
    273 #utilisation d’une variable dans une règle
    274 
    275 copie:
    276     ${MY_COPY} digicode.vbe tmp/
    277 }}}
    278 
    279 
    280 == 4.4 Variables prédéfinies ==
    281 
    282  * $@ Nom complet de la cible.
    283  * $* Nom du fichier cible sans l'extension.
    284  * $< Nom du premier fichier dépendant.
    285  * $+ Noms de tous les fichiers dépendants avec des dépendances doubles répertoriées
    286    dans leur ordre d'apparition.
    287  * $^ Noms de tous les fichiers dépendants. Les doubles sont retirés.
    288  * $ ? Noms de tous les fichiers dépendants plus récents que la cible.
    289  * $% Nom de membre pour des cibles qui sont des archives (langage C). Si, par
    290 
    291 === exemple ===
    292 
    293 La cible est libDisp.a(image.o), $% est image.o et $@ est libDisp.a.