Ich versuche eine gute Möglichkeit zu finden, einige RAII-ähnliche Aktionen in ein Makefile hinzuzufügen, das ich behalte. Derzeit habe ich etwas Ähnliches wie folgt aus:RAII-ähnliche Aktion in der Makefile-Regel
out: in
lockfile in.lock
echo in // Some action which can fail
rm -f in.lock
Dieser Code funktioniert gut, wenn mehrere Jobs verwenden, da es in erster Linie geistige Gesundheit statt der Leistung gemeint ist. Zumindest, wenn meine Aktion nicht fehlschlägt. Also, wenn ich einen Rückfall hinzufügen möchte. Also kurz gesagt, es wird in etwa so aussehen:
out: in
lockfile in.lock
(echo in) || (rm -f in.lock; false)
rm -f in.lock
Wieder einmal sieht gut aus, obwohl Ich mag nicht zweimal rm -f in.lock
zu schreiben, noch die (echo in)
sieht elegant aus, wenn der tatsächliche Inhalt mehrere Zeilen bash -Skript.
Dies würde ähnlich aussehen wie:
out: in
lockfile in.lock
trap "rm -f in.lock" EXIT; \
(echo in)
Dies würde jedoch die tatsächlichen Regeln aussehen komplexer, wenn Sie verschiedene Regeln haben, die wirklich getrennt sind.
out: in
lockfile in.lock
trap "rm -f in.lock" EXIT; \
$(SHOW_DEPENDENCY_ON_DEBUG) && \
(echo in)
Wo SHOW_DEPENDENCY_ON_DEBUG als echo [email protected] <=== $^
unter bestimmten Umständen und @
in anderen definiert werden. Ich bin mir also nicht sicher, ob ich alle Befehle gut ketten kann. Daher hoffe ich, dass jeder von euch einige Tricks kennt, die ich verpasst habe.
Kurz gesagt, Ich mag verwandeln:
out: in
lockfile in.lock
echo in // Some action(s) which can fail
rm -f in.lock
In einer Weise, die immer rm -f in.lock
ausführt, ohne bash-Befehle zu Kette oder die Aktion (en) zu duplizieren, die ausgeführt werden müssen, um die Aktionen zu beenden in den Regeln.
Jede Chance, die .INTERMEDIATE zu Wildcard beziehen, wie% .lock? – JVApen
@JVApen Nein, aber es ist OK. Siehe Aktualisierung. –
Ich kenne diesen Trick, ist in meinem Fall nicht so einfach, obwohl ich denke, dass einige Bausteine in der Lage sein werden, etwas zum Laufen zu bringen. Warum kann es nicht einfach sein? Tnx jedenfalls! – JVApen