Re: make -j

トップ ページ

このメッセージに返信
著者: Edgar Bonet
日付:  
To: guilde
題目: Re: make -j
Frédéric a écrit :
> C'est sensé être :
>
>     run
>     └── Fugitif.dsk
>         ├── menu.bin
>         │   └── menu.asm
>         ├── intro.bin
>         │   └── intro.asm
>         ├── game.bin
>         │   ├── font_charset.asm
>         │   │   └── fontNormalAsSprites.py
>         │   └── game.asm
>         ├── state.bin
>         └── gameplay_data_{01..21}.bin.zx0
>              └── gameplay_data_{01..21}.bin


Ce n'est pas ce qui est écrit dans le Makefile que tu as posté :

    $(GAME_FILE): $(FONT_FILE) $(STATE_FILE) $(GAME_SRC_FILE) #TODO: $(GAME_DEP_FILES)


En remplaçant les variables, ça donne :

    ../build/game.bin: ./font_charset.asm ../build/state.bin ./game.asm


> [state.bin] est créé par la commande ASM_CMD, qui crée game.bin et
> tous les gameplay_data_{01..21}.bin [...]


Si je comprends bien, la commande

    $(ASM_CMD) $(ASM_OPTS) $(DEFINES) -DGAME $(GAME_SRC_FILE)


génère non seulement game.bin, mais aussi state.bin et
gameplay_data_{01..21}.bin. C'est bien ça ?

C'est tordu, mais j'ai une idée que tu pourrais essayer. Je te suggère
de ne pas mentionner du tout les fichiers state.bin et
gameplay_data_*.bin dans le Makefile. Vu qu'ils sont fabriqués en même
temps que game.bin, tu vas supposer que si game.bin existe et est à
jour, alors il en est de même de ces autres fichiers. On pourrait dire
que « game.bin » devient le représentant d'une famille de fichiers. Du
coup, si une cible dépend d'un des autres fichiers de la famille, tu vas
prétendre qu'elle dépend de game.bin. Tu vas donc décrire dans le
Makefile le graphe de dépendances suivant :

    run
    └── Fugitif.dsk
        ├── menu.bin
        │   └── menu.asm
        ├── intro.bin
        │   └── intro.asm
        ├── game.bin
        │   ├── font_charset.asm
        │   │   └── fontNormalAsSprites.py
        │   └── game.asm
        └── gameplay_data_{01..21}.bin.zx0
            └── game.bin


Ainsi, avant de compresser gameplay_data_*.bin, make va attendre que
game.bin ait été généré, et donc (indirectement) que les
gameplay_data_*.bin le soient aussi.

À+,

Edgar.