私が保守しているメイクファイルにいくつかのRAIIライクなアクションを追加する方法を見つけようとしています。それは主にパフォーマンスするのではなく、正気を意味するように、複数のジョブを使用した場合メイクファイルルールでのRAIIのような動作
out: in
lockfile in.lock
echo in // Some action which can fail
rm -f in.lock
このコードは正常に動作します:現在、私はこれに似た何かを持っています。少なくとも、私の行動が失敗していなければ。だから私はこれにフォールバックを追加するのが好きです。だから、要するに、それは次のようになります:
out: in
lockfile in.lock
(echo in) || (rm -f in.lock; false)
rm -f in.lock
またしても私は二回
rm -f in.lock
を書くことが好きではありませんが、格好良い、また実際の内容は、bashの数行のであれば
(echo in)
がエレガントに見えるん
-スクリプト。
これはのようになります。
out: in
lockfile in.lock
trap "rm -f in.lock" EXIT; \
(echo in)
しかし、これはあなたが本当に独立している異なるルールを持っている場合、実際のルールはより複雑に見えるようになります。
SHOW_DEPENDENCY_ON_DEBUGは、特定の状況でecho [email protected] <=== $^
等で
@
として定義することができる
out: in
lockfile in.lock
trap "rm -f in.lock" EXIT; \
$(SHOW_DEPENDENCY_ON_DEBUG) && \
(echo in)
。だから私はすべてのコマンドをうまくつなぐことができるかどうかはわかりません。だから私はあなたが逃したいくつかの技を知っていることを願っています。
out: in
lockfile in.lock
echo in // Some action(s) which can fail
rm -f in.lock
を常にrm -f in.lock
を実行ように、チェーンのbash-コマンドを有するか、アクションを確定するために実行する必要があるアクション(複数可)を複製せずに:要するに
make
が行う任意のファイルを)確保の問題については
.INTERMEDIATEは、%の.lockのように、ワイルドカードを参照することができます任意のチャンス? – JVApen
@JVApenいいえ、でも問題ありません。更新を参照してください。 –
私はそのトリックを知っています、私の場合は単純ではありませんが、いくつかのビルディングブロックが何かを動かすことができると思います。どうしてそんなに簡単ではないのですか?とにかくTnx! – JVApen