在軟體開發中,make 是一個工具程式,經由讀取一個叫做 makefile 的檔案,自動化建構軟體。
編譯小型程式可用簡單的命令編譯或 shell script 編譯,但當程式很大且包含大量標頭檔和函式庫時,就需要使用 makefile。
makefile 會將程式分成好幾個模組,根據裡面的
1. 目標 (target)
2. 規則 (rule)
3. 檔案的修改時間進行判斷哪些需要重新編譯,
可以省去大量重複編譯的時間,這在大型程式中尤為有用。
Make 的工作流程
一般來說,當我們輸入 make 命令,會執行以下內容:
1. make 會在當前目錄下按順序找尋文件名為 GNUmakefile、makefile 或 Makefile 的文件。
2. 在 makefile 文件中的找到第一個目標文件(target),並把這個文件作為最終的目標文件。
3. 如果沒找到或目標文件所依賴的文件,或修改時間要比目標文件新,則 make 將執行後面所定義的命令來生成這個文件,如此遞迴下去找到文件彼此的依賴關係,直到最終編譯出第一個目標文件。
如果最後被依賴的文件找不到,那麼 make 就會直接退出並報錯,而對於所定義的命令的錯誤或是編譯不成功,make 不予理會。
Makefile 主要內容
Makefile 裡主要包含了五個東西:顯式規則、隱式規則、變量定義、文件指示和註釋。
- 顯式規則:顯式規則表示如何生成一個或多個目標文件。
- 隱式規則:比較簡略地書寫 Makefile 規則,例如規則中有 .o 文件,make 會自動的把 .c 文件也加入依賴關係中。
- 變數定義:類似 C 語言中的 define,定義的變數都會置換到引用位置上。
- 文件指示:
- 類似 C 語言中的 include,一個 Makefile 中引用另一個 Makefile,如 include makefile.inc。
- 類似 C 語言中的 預編譯 #if,根據某些情況指定 Makefile 中的有效部分。
- 註釋與換行:Makefile 中只有行註釋,用 # 符號;換行則是使用 \ 符號 。
No comments:
Post a Comment