2016-04-27 3 views
0

現在のターゲットで特定の条件が満たされている場合、他のターゲットを引き続き中止する方法を教えてください。例えばエラーメッセージなしでメイクファイルを中止する方法

Step01: 
    @# Do something 

Step02: Step01_Output 
    @# Check that Step01_output meet certain condition, otherwise, abort 

Step03: Step02 
    @# Do somethings (of course if did not abort in Step02) 

# And so on 

私は、ステータス0 ==で "終了" を使用してみました>しかし、それにもかかわらず、続けて! "exit 1"などの存在状態を試しました==>出力を中止しますが、出力時にエラーメッセージが表示されます。 私は中止したいが、make calling shellでエラーメッセージを出さない。このようなチェックならば、私はSTEP02からのenv変数を設定し、STEP03を囲む内の後にすることも試み :

ifneq ($(ToAbort),1) 
Step03: 
... 
StepN 

endif 

は残念ながら、メイクも条件や変数の値を見ていなかったようだが間で転送されていませんターゲット。

アイデア?追加の目標を追加することで可能性がありますか?

+1

擬似コードではなく現実の例を提供してください。これは[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)の可能性があります。 。 – user657267

答えて

0

すべてのターゲットが作成されたとき、またはエラーが発生したときにのみmakeを終了すると思います。 ところで、コマンドはサブシェルで実行されるので、`exit 'を使うとmakeが終了しません。

0

あなたの考えが正しいかどうかは不明です。 作品のカリングをにしてください。にしてください。しかし

、 あなたはシェルの片言で要求されたものを表現することができと再帰(申し訳ありません)します。 「がエラーの有無とともに完了したら、完了しました。それ以外の場合は、bで実行してください。

Step01: 
    command1 
    command2 
    command3 && ${MAKE} Step02 
    command4 

Step02: 
    cmd5 
    cmd6 && ${MAKE} Step03 

⋮ 

これらのアンパサンドに注意してください。 if command3; then ${MAKE} Step02; fiはあなたが望むことをしません。 が失敗した場合は、 に進みます。コマンド4に続行したくない場合。

P.S.実際のファイルではない場合、PHONYとしてマークすることを忘れないでください。