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