makefile 入門

一個 *Makefile 檔案*是控制 make 程式操作的文字檔案。make 程式通常用於管理原始檔中程式的建立,但它可以更普遍地用於處理在修改其他檔案(或先決條件 ) 後需要重新生成檔案(或目標 )的任何程序。在生成檔案描述了目標和先決條件之間的關係,並且還規定了到年月日時的先決條件的一個或多個發生了變化,使目標所需的命令。make 確定過時的唯一方法是比較目標檔案的修改時間及其先決條件。 ** **

Makefile 在某些方面有點獨特,最初可能會令人困惑。

首先,makefile 由同一檔案中的兩種完全不同的程式語言組成。檔案的大部分是用 make 可以理解的語言編寫的:這提供了變數賦值和擴充套件,一些前處理器功能(包括其他檔案,檔案各部分的條件解析等)以及目標及其定義先決條件。此外,每個目標都可以有一個配方與之關聯,指定應呼叫哪些命令以使該目標更新。配方被編寫為 shell 指令碼(預設情況下為 POSIX sh)。make 程式不解析此指令碼:它執行 shell 並將指令碼傳遞給要執行的 shell。事實上,配方不是由 make 解析,而是由單獨的 shell 程序處理,這對於理解 makefile 是至關重要的。

其次,makefile 不是像指令碼那樣的過程語言:因為 make 解析 makefile,它在內部構造有向圖,其中目標是圖的節點,先決條件關係是邊。只有在所有的 makefile 完全解析並且圖形完成之後,make 才會選擇一個節點(目標)並嘗試使其更新。為了確保目標是最新的,它必須首先確保每個目標的先決條件都是最新的,依此類推。