Linux

make如何繼續編譯?

  • July 8, 2014

我知道我可以make隨時中斷程序而無需重新編譯整個原始碼樹。據我所知,make只有在尚未編譯的情況下編譯目標,或者在最後一次編譯後修改原始碼。

但是如果我中斷make,肯定會有一個或多個(取決於並發級別)半就緒的二進製文件。下次我跑步時它們對它們有什麼影響makeCtrl或者當我按下+C以避免部分編譯的二進製文件時它是否完成了目前目標?

簡單來說,您可以將其make視為具有(可能很大)數量的步驟,其中每個步驟將多個文件作為輸入並創建一個文件作為輸出。

一個步驟可能是“編譯file.cfile.o”或“用於ld連結main.ofile.o進入program”。如果您使用 中斷makeCtrl``C則目前執行的步驟將被終止,這將(或應該)刪除它正在處理的輸出文件。通常不會留下任何“半就緒的二進製文件”。

當您重新啟動make時,它將查看所有輸入和輸出文件的時間戳並重新執行以下步驟:

  • 輸入文件的時間戳比輸出文件新
  • 輸出文件不存在

這通常意味著如果一個步驟需要很長時間才能執行(這在現代電腦上很少見,但是ld大型程序的步驟在make設計時很容易花費幾分鐘),那麼停止並重新啟動make將從頭開始該步驟。

您的平均值的實際情況Makefile比上述描述要復雜得多,但基本原理是相同的。

引用自:https://unix.stackexchange.com/questions/137913