In meiner GNUmakefile möchte ich eine Regel haben, die ein temporäres Verzeichnis verwendet. Zum Beispiel:Definiere make-Variable zur Ausführungszeit der Regel
out.tar: TMP := $(shell mktemp -d)
echo hi $(TMP)/hi.txt
tar -C $(TMP) cf [email protected] .
rm -rf $(TMP)
Wie geschrieben, schafft die obige Regel das temporäre Verzeichnis zu der Zeit, die die Regel analysiert ist. Dies bedeutet, dass, selbst wenn ich nicht ständig out.tar mache, viele temporäre Verzeichnisse erstellt werden. Ich möchte vermeiden, dass mein/tmp mit ungenutzten temporären Verzeichnissen übersät ist.
Gibt es eine Möglichkeit, die Variable nur zu definieren, wenn die Regel ausgelöst wird, im Gegensatz zu wann immer sie definiert ist?
Mein Hauptgedanke ist es, die mktemp und tar in ein Shell-Skript zu dumpen, aber das scheint etwas unansehnlich.
einige Präzisierungen cool ... das wird nicht Umfang TMP zu diesem Ziel wird es? Wenn es also andere Regeln gibt, die ihre eigene $ (TMP) -Nutzung haben (möglicherweise parallel zu -j), kann es zu Konflikten kommen? Ist das @echo überhaupt nötig? Scheint, du könntest es einfach weglassen. –
Ich dachte nicht, du könntest es ohne das '@ echo' machen, aber ich habe es getestet und es funktioniert. Guter Fang! Ich werde es in meiner Antwort ändern. –
Was das Scoping angeht, wäre die TMP-Variable nicht spezifisch für diese spezielle Regel.Es würde in der globalen Namesapce vorhanden sein und könnte Konflikte mit anderen Variablen mit demselben Namen verursachen. Ist das das gewünschte Verhalten? Es gibt wahrscheinlich Möglichkeiten, um es zu umgehen, wenn es sein muss. –