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