make 是如何工作的

2021-10-11 18:11:54 字數 1125 閱讀 1354

在預設的方式下,也就是我們只輸入 make 命令。那麼,

make 會在當前目錄下找名字叫「makefile」或「makefile」的檔案。

如果找到,它會找檔案中的第乙個目標檔案(target),在上面的例子中,他會找到「edit」這個文

件,並把這個檔案作為最終的目標檔案。

如果 edit 檔案不存在,或是 edit 所依賴的後面的 .o 檔案的檔案修改時間要比 edit 這個檔案新,

那麼,他就會執行後面所定義的命令來生成 edit 這個檔案。

如果 edit 所依賴的 .o 檔案也不存在,那麼 make 會在當前檔案中找目標為 .o 檔案的依賴性,如

果找到則再根據那乙個規則生成 .o 檔案。(這有點像乙個堆疊的過程)

當然,你的 c 檔案和 h 檔案是存在的啦,於是 make 會生成 .o 檔案,然後再用 .o 檔案生成 make

的終極任務,也就是執行檔案 edit 了。

這就是整個 make 的依賴性,make 會一層又一層地去找檔案的依賴關係,直到最終編譯出第乙個目

標檔案。在找尋的過程中,如果出現錯誤,比如最後被依賴的檔案找不到,那麼 make 就會直接退出,並

報錯,而對於所定義的命令的錯誤,或是編譯不成功,make 根本不理。make 只管檔案的依賴性,即,如

果在我找了依賴關係之後,冒號後面的檔案還是不在,那麼對不起,我就不工作啦。

通過上述分析,我們知道,像 clean 這種,沒有被第乙個目標檔案直接或間接關聯,那麼它後面所定

義的命令將不會被自動執行,不過,我們可以顯示要 make 執行。即命令——make clean ,以此來清除

所有的目標檔案,以便重編譯。

於是在我們程式設計中,如果這個工程已被編譯過了,當我們修改了其中乙個原始檔,比如 file.c ,那

麼根據我們的依賴性,我們的目標 file.o 會被重編譯(也就是在這個依性關係後面所定義的命令),於

是 file.o 的檔案也是最新的啦,於是 file.o 的檔案修改時間要比 edit 要新,所以 edit 也會被重新

鏈結了(詳見 edit 目標檔案後定義的命令)。

而如果我們改變了 command.h ,那麼,kdb.o 、command.o 和 files.o 都會被重編譯,並且,edit

會被重鏈結。

make 是如何工作的

edit main.o kbd.o command.o display.o insert.o search.o files.o utils.o cc o edit main.o kbd.o command.o display.o insert.o search.o files.o utils.o我們...

make是怎樣工作的

預設情況下,我們輸入make命令,那麼 當然你可以指定檔名,make f filename 1.make會去當前目錄下尋找叫makefile或叫makefile的檔案。2.然後讀入makefile檔案裡面內容,找到第乙個目標的檔案並把它作為最終要生成的目標,故第乙個目標是預設目標。4.然後再尋找當前...

Make的工作原理

makefile檔案 make是乙個命令,makefile是乙個檔案。make命令執行時,需要乙個 makefile 檔案,以告訴make命令需要怎麼樣的去編譯和鏈結程式。乙個工程中的原始檔不計數,其按型別 功能 模組分別放在若干個目錄中,makefile定義了一系列的規則來指定,哪些檔案需要先編譯...