Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Make, zpracování souborů vytvořených až při kompilaci

Dělám generátor statických stránek (Static Site Generator) pomocí make

V podstatě čtu .RST soubory a vytvářím .HTML soubory, což je lehké:


TARGETS_R = $(shell find . -name '*.rst')
TARGETS_H = $(TARGETS_R:.rst=.html)
regular_files: $(TARGETS_H)
    @echo "Generating HTML files and tag files..."
%.html: %.rst
    @./compile.py $< $@ # create also tags/<tag_name>.tag files as side-effect

Problém je, že vstupní soubory obsahují tagy, takže seznam tagů zjistím teprve až je všechny nějak zpracuju. Tagy se mi objeví jako tags/*.tag soubory, s tím, že jejich jména předem neznám (protože jsou uvnitř těch vstupních souborů, odkud se dají relativně snadno vyparsovat).

Takhle nějak bych si to naivně představoval - akorát, že to nechodí jak má, ale při prvním spuštění to vygeneruje ty *.tag soubory (ale žádné *.nav), teprve po druhém spuštění to z už existujících souborů .tag udělá všechny potřebné .nav (tady je zjednodušené řešení, protože nejde o obsah, ale o existenci souborů)


TARGETS_R = $(shell find . -name '*.rst')
TARGETS_H = $(TARGETS_R:.rst=.html)
regular_files: $(TARGETS_H)
    @echo "Generating HTML files and tag files..."
%.html: %.rst
    @./compile.py $< $@ @# create also tags/<tag_name>.tag files as side-effect

# ----------- tohle bych chtěl, aby se vyhodnotilo až když je vršek hotový
TAGS = $(shell find . -name '*.tag')
NAVS = $(TAGS:.tag=.nav)
navigation.nav: $(NAVS)
    echo $^ >$@ # some magic here
%.nav: %.tag
    echo $^ >$@ # some magic here

.PHONY: all regular_files

all: regular_files navigation.nav

No a navíc bych to rád spouštěl paralelně s argumentem "-j24", abych využil všechna jádra.

Myslím, že na to musí být nějaký trik, jak to dělat, protože něco podobného už muselo řešit asi bambilión lidí přede mnou, ale nějak jsem nepřišel na to, co hledat, na co se ptát, takže jsem nenašel nic k tématu.
Zkoušel jsem to jak s googlem (vždycky mi vypsal mraky věcí, které s tím nesouvisely), tak jsem to zkusil s chatGPT (a ten zase vůbec nepochopil, o co mi jde na navrhoval samé nefunkční kraviny)

Takže jestli někdo zná řešení, nebo aspoň na co se ptát, tak bych byl velice rád.

Odpověď na otázku

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny