Re: make -j

トップ ページ

このメッセージに返信
著者: Edgar Bonet
日付:  
To: guilde
題目: Re: make -j
Bonjour !

Frédéric a écrit :
> Bon, mes dépendances semblent ok, mais lorsque j'utilise l'option -j,
> toutes les cibles ne sont pas générées.
>
> Ici, en l'occurence, il crée bien les cibles 'menu', 'intro', et
> 'game', mais pas la cible 'dsk', ni la cible 'run' ! C'est pourtant la
> cible (par défaut) 'run' qui crée la cible 'dsk', qui à son tour crée
> les 3 autres...


J'ai regardé, et je n'ai pas trouvé le problème. De ce que j'ai compris,
ton graphe de dépendances est un arbre :

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


Le seul truc bizarre, c'est $(STATE_FILE) (state.bin), qui ne dépend de
rien, et qui n'a pas de recette pour le créer. Est-ce que le fichier est
préexistant ?

J'ai testé ton Makefile avec le script ci-dessous. Il semble bien
marcher, autant en mode séquentiel qu'en parallèle. En mode séquentiel,
il affiche ces messages :

    'Generating menu.bin'...
    Generating 'intro.bin'...
    Generating 'font_charset.asm'...
    Generating 'game.bin'...
    Compressing '../build/gameplay_data_01.bin'...
    [...et les autres gameplay_data_*.bin...]
    Generating 'Fugitif.dsk'...
    RetroVirtualMachine -boot=cpc6128 -noshader -insert ...


En mode parallèle, je vois la même chose, dans le même ordre, sauf la
ligne game.bin qui apparaît après les « Compressing... ».

Tu peux toujours essayer de lancer make avec les options -d (attention,
très verbeux), -r (i.e. --no-builtin-rules, par précaution) ou --trace.

J'ai GNU Make 4.3 / Ubuntu 22.04.

À+,

Edgar.

────────────────────────────────────────────────────────────────────────
#!/bin/bash

# Copy the Makefile to a temporary directory and move there.
root=$(mktemp -d /tmp/fugitif-XXX)
mkdir $root/src
cp -a Makefile $root/src/
cd $root

# Create the directory tree.
mkdir -p bin build tools/font dsk

# Create the binaries.
cat >bin/dummy <<EOF
#!/bin/bash
sleep \$(bc<<<\$RANDOM/65536)
EOF
chmod a+x bin/dummy
ln -s dummy bin/RetroVirtualMachine
ln -s dummy bin/sjasmplus
ln -s dummy bin/zx0
ln -s ../../bin/dummy tools/font/fontNormalAsSprites2Charset.py
ln -s ../bin/dummy tools/sectorize.py

# Create source files.
touch src/{menu,intro,game}.asm
touch tools/font/fontNormalAsSprites.py
touch build/gameplay_data_{01..21}.bin

# Show the tree we built.
tree -a $root

# Run make.
PATH=../bin:$PATH make -C src -j $(nproc)

# Clean up.
cd -
rm -rf "$root"