Changes between Version 95 and Version 96 of Archi-1-TP10


Ignore:
Timestamp:
Nov 28, 2021, 1:02:02 PM (4 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Archi-1-TP10

    v95 v96  
    475475{{{#!protected ------------------------------------------------------------------------------------
    476476''
    477 COurs 10 / slide 42
     477Cours 10 / slide 42
    478478- État de la pile après l'exécution des lignes 36 à 43
    479479{{{#!xml
     
    5225221. Rappelez à quoi sert un Makefile?
    523523{{{#!protected ------------------------------------------------------------------------------------
    524 '''''''''''''''
     524''
     525Cours 9 / slide 26
    525526- Le rôle principal d'un Makefile est de décrire le mode d'emploi pour construire un fichier dit **`cible`** à partir d'un ou plusieurs fichiers **`source`** (dits de dépendance) en utilisant des commandes du `shell`. Ce rôle pourrait tout aussi bien être occupé par un script `shell` et d'ailleurs, dans le premier TP, nous avons vu un usage du Makefile dans lequel nous avions rassemblé plusieurs scripts `shell` sous forme de règles.
    526 - Le second rôle d'un Makefile est de permettre la reconstruction efficace du fichier **`cible`** lorsqu'un seul fichier **`source`** change. Pour ce rôle, le Makefile exprime toutes les étapes de constructions de la **`cible`** finale et des **`cibles`** intermédiaires sous forme d'un arbre dont les feuilles sont les fichiers **`sources`**.
    527 '''''''''''''''
     527- Le second rôle d'un Makefile est de permettre la reconstruction partielle du fichier **`cible`** lorsque quelques fichiers **`source`** changent (pas tous). Pour ce rôle, le Makefile exprime toutes les étapes de construction de la **`cible`** finale et des **`cibles`** intermédiaires sous forme d'un arbre dont les feuilles sont les fichiers **`sources`**.
     528''
    528529}}}
    5295301. Vous n'allez pas à avoir à écrire un Makefile complètement. Toutefois, si vous ajoutez des fichiers source, vous allez devoir les modifier en ajoutant des règles. Nous avons vu brièvement la syntaxe utilisée dans les Makefiles de ce TP au cours n°1. Les lignes qui suivent sont des extraits de `1_klibc/Makefile` (le Makefile de l'étape1). Dans cet extrait, quelles sont la `cible` finale, les `cibles` intermédiaires et les `sources`? A quoi servent les variables automatiques de make? Dans ces deux règles, donnez-en la valeur.
    530531{{{#!make
    531 kernel.x : kernel.ld obj/hcpu.o obj/kinit.o obj/klibc.o obj/harch.o
     532kernel.x : kernel.ld obj/hcpua.o obj/kinit.o obj/klibc.o obj/harch.o
    532533    $(LD) -o $@ -T $^
    533534    $(OD) -D $@ > $@.s
     
    538539}}}
    539540{{{#!protected ------------------------------------------------------------------------------------
    540 '''''''''''''''
     541''
     542Cours 9 / slides 27 et 56
    541543- La `cible` finale est : `kernel.x`
    542 - Les `cibles` intermédiaires sont : `kernel.ld`, `obj/hcpu.o`, `obj/kinit.o`, `obj/klibc.o` et `obj/harch.o`.
     544- Les `cibles` intermédiaires sont : `kernel.ld`, `obj/hcpua.o`, `obj/kinit.o`, `obj/klibc.o` et `obj/harch.o`.
    543545- La `source` est : `hcpua.S`
    544546- Les variables automatiques servent à extraire des noms dans la définition de la dépendance (`cible : dépendances`)
    545547  - dans la première règle :
    546548    - `$@` = `cible` = `kernel.x`
    547     - `$^` = l'ensemble des dépendances = `kernel.ld`, `obj/hcpu.o`, `obj/kinit.o`, `obj/klibc.o` et `obj/harch.o`
     549    - `$^` = l'ensemble des dépendances = `kernel.ld`, `obj/hcpua.o`, `obj/kinit.o`, `obj/klibc.o` et `obj/harch.o`
    548550  - dans la seconde règle :
    549     - `$@` = `cible` = `obj/hcpu.o`
     551    - `$@` = `cible` = `obj/hcpua.o`
    550552    - `$<` = la première des dépendances = `hcpua.S`
    551 '''''''''''''''
     553''
    552554}}}
    5535551. Dans le TP, à partir de la deuxième étape, nous avons trois répertoires de sources `kernel`, `ulib` et `uapp`. Chaque répertoire contient une fichier `Makefile` différent destiné à produire une `cible` différente grâce à une règle nommée `compil`, c.-à-d. si vous tapez `make compil` dans un de ces répertoires, cela compile les sources locales.\\Il y a aussi un Makefile dans le répertoire racine `4_libc`. Dans ce dernier Makefile, une des règles est destinée à la compilation de l'ensemble des sources dans les trois sous-répertoires. Cette règle appelle récursivement la commande `make` en donnant en argument le nom du sous-répertoire où descendre :\\`make -C <répertoire> [cible]` est équivalent à `cd <répertoire>; make [cible] ; cd ..`\\Ecrivez la règle `compil` du fichier `4_libc/Makefile`.
     
    564566}}}
    565567{{{#!protected ------------------------------------------------------------------------------------
    566 '''''''''''''''
     568''
     569Ce n'est pas dit dans le cours, mais la question contient la réponse...
    567570{{{#!make
    568571compil:
     
    571574    make -C uapp   compil
    572575}}}
    573 '''''''''''''''
     576''
    574577}}}
    575578
     
    5895921. fonction C à nombre d'arguments variables `fprintf`?
    590593{{{#!protected ------------------------------------------------------------------------------------
    591 '''''''''''''''
     594''
    592595-
    593 '''''''''''''''
     596''
    594597}}}
    5955981. génération de nombres pseudoaléatoires `rand`?
    596599{{{#!protected ------------------------------------------------------------------------------------
    597 '''''''''''''''
     600''
    598601-
    599 '''''''''''''''
     602''
    600603}}}
    6016041. traduction d'une chaîne de caractère en nombre `atoi`?
    602605{{{#!protected ------------------------------------------------------------------------------------
    603 '''''''''''''''
     606''
    604607-
    605 '''''''''''''''
    606 }}}
    607 }}}
    608 
    609 
    610 ------------------------------------------------------------------------------------------------------------------------------------
     608''
     609}}}
     610}}}
     611
     612
     613----------------------------------------------------------------------------------------------------
    611614
    612615