Linux
make如何繼續編譯?
我知道我可以
make
隨時中斷程序而無需重新編譯整個原始碼樹。據我所知,make
只有在尚未編譯的情況下編譯目標,或者在最後一次編譯後修改原始碼。但是如果我中斷
make
,肯定會有一個或多個(取決於並發級別)半就緒的二進製文件。下次我跑步時它們對它們有什麼影響make
?Ctrl
或者當我按下+C
以避免部分編譯的二進製文件時它是否完成了目前目標?
簡單來說,您可以將其
make
視為具有(可能很大)數量的步驟,其中每個步驟將多個文件作為輸入並創建一個文件作為輸出。一個步驟可能是“編譯
file.c
為file.o
”或“用於ld
連結main.o
並file.o
進入program
”。如果您使用 中斷make
,Ctrl``C
則目前執行的步驟將被終止,這將(或應該)刪除它正在處理的輸出文件。通常不會留下任何“半就緒的二進製文件”。當您重新啟動
make
時,它將查看所有輸入和輸出文件的時間戳並重新執行以下步驟:
- 輸入文件的時間戳比輸出文件新
- 輸出文件不存在
這通常意味著如果一個步驟需要很長時間才能執行(這在現代電腦上很少見,但是
ld
大型程序的步驟在make
設計時很容易花費幾分鐘),那麼停止並重新啟動make
將從頭開始該步驟。您的平均值的實際情況
Makefile
比上述描述要復雜得多,但基本原理是相同的。