Nel mio GNUmakefile, vorrei avere una regola che usi una directory temporanea. Per esempio:Definisci make variable al tempo di esecuzione della regola
out.tar: TMP := $(shell mktemp -d)
echo hi $(TMP)/hi.txt
tar -C $(TMP) cf [email protected] .
rm -rf $(TMP)
Come scritto, la regola di cui sopra crea la directory temporanea nel momento in cui la regola è analizzato. Ciò significa che, anche se non lo faccio fuori.tar sempre, vengono create molte directory temporanee. Vorrei evitare che il mio/tmp sia disseminato di directory temporanee inutilizzate.
C'è un modo per far sì che la variabile venga definita solo quando la regola viene attivata, al contrario di quando viene definita?
Il mio pensiero principale è quello di scaricare mktemp e tar in uno script di shell, ma ciò sembra un po 'sgradevole.
raffreddare un paio di chiarimenti ... questo non sarà portata TMP a questo obiettivo, sarà vero? Quindi se ci sono altre regole che hanno il loro uso $ (TMP) (possibilmente in parallelo con -j), ci possono essere conflitti? Inoltre, anche @echo è necessario? Sembra che potresti lasciarlo fuori. –
Non pensavo che potessi farlo senza '@ echo', ma l'ho testato e funziona. Buona pesca! Lo cambierò nella mia risposta. –
Per quanto riguarda lo scoping, la variabile TMP non sarebbe specifica per quella particolare regola.Sarebbe esistere nella namesapce globale e potrebbe entrare in conflitto con altre variabili che hanno lo stesso nome. È questo il comportamento desiderato? Ci sono probabilmente dei modi per aggirarlo se necessario. –