2017-10-17 4 views
1

た後の状態を復元することができますどのように次のことを考慮すると、障害

all: 
    mv info.h info.h.back 
    generate_info.sh 
    compile 
    mv info.h.back info.h 

にはどうすればコンパイルが失敗した場合でも、最後の行を実行するために作るに強制できますか?

私は.DELETE_ON_ERRORを認識していますが、これは障害発生時にターゲットを削除することのみを扱っています。

コンパイルコマンドの前に-を追加するオプションもあります。残念ながら、これはmake全体を受け入れられない良いエラーコードで返すようになります。

答えて

2

強制することはできません。シェルスクリプトで自分自身を実行するように手配しなければなりません。 Makeはシェルスクリプトのすべての "論理行"を同じシェルコマンドに送ります。物理行の末尾にバックスラッシュを追加して、複数の物理行を1つの論理行に変換します。

したがって、たとえば:

all: 
    mv info.h info.h.back 
    generate_info.sh && compile; \ 
    r=$$?; mv info.h.back info.h; \ 
    exit $$r 

これは、シェル変数rに2つのコマンドのリターンコードを保存し、その後、保存された結果コードでシェルを終了し、その後、mvコマンドを実行します。

generate_info.sh && compileは、最初のコマンド(generate_info.sh)が成功した場合にのみ、2番目のコマンド(compile)が実行されることを意味します。

関連する問題