2017-10-17 80 views
1

狀態考慮以下幾點:如何化妝才能恢復失敗後

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

如何強制使運行即使編譯失敗的最後一行?

我知道.DELETE_ON_ERROR,但這隻涉及在失敗時移除目標。

我也意識到在編譯命令之前添加-的選項。不幸的是,這將使整個製作返回一個很好的錯誤代碼,這是不可接受的。

回答

2

你不能強迫make來做到這一點。你必須自己安排它在shell腳本中完成。 Make會將shell腳本的每個「邏輯行」發送到同一個shell命令。通過在物理線路的末端添加反斜槓,將多條物理線路變成一條邏輯線路。

所以,例如:

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

這節省了在殼可變r兩個命令的返回代碼,然後運行mv命令,然後退出與所保存的結果代碼的殼。

generate_info.sh && compile表示僅當第一個命令(generate_info.sh)成功時纔會運行第二個命令(compile)。