| 1 | {{{ |
| 2 | #!html |
| 3 | <h1> Annexe : Makefile </h1> |
| 4 | }}} |
| 5 | |
| 6 | [[PageOutline]] |
| 7 | |
| 8 | = Introduction = |
| 9 | |
| 10 | Le flot de conception proposé par la chaîne de CAO Alliance se décompose en plusieurs étapes. |
| 11 | Chaque étape est réalisée par un outil CAO, et les différents outils communiquent entre eux par des fichiers. |
| 12 | |
| 13 | Les dépendances de données entre les différentes étapes sont donc matérialisées par des dépendances entre fichiers. |
| 14 | L'outil '''make''' de UNIX permet de décrire ces dépendances, et |
| 15 | donc d'automatiser l'enchaînement des étapes de conception. |
| 16 | |
| 17 | Le fichier Makefile est un ''script'' décrivant les dépendances, dont l'exécution est lancée par la commande ''make''. |
| 18 | |
| 19 | = Principe de base : Les Règles = |
| 20 | |
| 21 | Un Makefile est un fichier contenant une ou plusieurs règles traduisant les dépendances entre les actions et les fichiers. |
| 22 | |
| 23 | Voici une règle type Makefile : |
| 24 | {{{ |
| 25 | #Rq: chaque commande doit être précédée d’une tabulation |
| 26 | cible1 : dépendance1 dépendance2 .... |
| 27 | commande_X |
| 28 | commande_Y |
| 29 | }}} |
| 30 | |
| 31 | Les dépendances et cibles représentent, en général, des fichiers. |
| 32 | Seule la première régle du Makefile est examinée. |
| 33 | Les règles suivantes sont ignorées si elles ne sont pas impliquées par la première. |
| 34 | Si 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. |
| 35 | Pour 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. |
| 36 | |
| 37 | Remarque : les commandes servent généralement à produire la cible (i.e un nouveau fichier). |
| 38 | Une cible peut ne pas représenter un fichier. Dans ce cas, les commandes de cette règle seront toujours exécutées. |
| 39 | |
| 40 | = Règles de modèles = |
| 41 | |
| 42 | Ces règles sont plus polyvalentes car vous pouvez spécifier des règles de dépendance plus complexes. |
| 43 | Une règle de modèle ressemble à une règle normale, sauf qu'un symbole (%) apparaît dans le nom de la cible. |
| 44 | Les dépendances emploient également (%) pour indiquer la relation entre les noms de dépendance et le nom de la cible. |
| 45 | La règle de modèle suivante spécifie comment tous les fichiers vst sont formés à partir des vbe. |
| 46 | {{{ |
| 47 | #exemple de règle pour la synthèse |
| 48 | %.vst : %.vbe |
| 49 | boog $* |
| 50 | }}} |
| 51 | |
| 52 | = Définitions de variables = |
| 53 | |
| 54 | On 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. |
| 55 | |
| 56 | {{{ |
| 57 | #définitions de variables |
| 58 | |
| 59 | MY_COPY = cp -r |
| 60 | MY_NUM = 42 |
| 61 | MY_STRING = "hello" |
| 62 | |
| 63 | #Elles sont utilisables à n'importe quel endroit du Makefile. Elles doivent être précédées du caractère '''$''' |
| 64 | |
| 65 | #utilisation d’une variable dans une règle |
| 66 | |
| 67 | copie: |
| 68 | ${MY_COPY} digicode.vbe tmp/ |
| 69 | }}} |
| 70 | |
| 71 | |
| 72 | = Variables prédéfinies = |
| 73 | |
| 74 | * '''$@''' Nom complet de la cible. |
| 75 | * '''$*''' Nom du fichier cible sans l'extension. |
| 76 | * '''$<''' Nom du premier fichier dépendant. |
| 77 | * '''$+''' Noms de tous les fichiers dépendants avec des dépendances doubles répertoriées dans leur ordre d'apparition. |
| 78 | * '''$!^''' Noms de tous les fichiers dépendants. Les doubles sont retirés. |
| 79 | * '''$?''' Noms de tous les fichiers dépendants plus récents que la cible. |
| 80 | * '''$%''' Nom de membre pour des cibles qui sont des archives (langage C). |
| 81 | Si, par la cible est libDisp.a(image.o), $% est image.o et $@ est libDisp.a. |