make 命令會自動讀取當前目錄下的 Makefile 檔案[31],完成相應的編譯步驟。Makefile 由一組規則(Rule)組成,每條規則的格式是:
target ... : prerequisites ...
command1
command2
...
目標和條件之間的關係是:欲更新目標,必須 首先更新它的所有條件;所有條件中只要有一個條件被更新了,目標也必須隨 之被更新。所謂“更新”就是執行一遍規則中的命令列表,命令列表中的每條 命令必須以一個 Tab 開頭,注意不能是空格,Makefile 的格式不像 C 語言的縮 進那麼隨意,對於 Makefile 中的每個以 Tab 開頭的命令,make 會建立一個 Shell 程式去執行它。
• 目標沒有生成。
• 某個條件需要更新。
• 某個條件的修改時間比目標晚。
clean 目標是一個約定俗成的名字,在所有軟體專案的 Makefile 中都表示清 除編譯生成的檔案,類似這樣的約定俗成的目標名字有: • all,執行主要的編譯工作,通常用作預設目標。 • install,執行編譯後的安裝工作,把可執行檔案、配置檔案、文件等 分別拷到不同的安裝目錄。 • clean,刪除編譯生成的二進位制檔案。 • distclean,不僅刪除編譯生成的二進位制檔案,也刪除其它生成的文 件,例如配置檔案和格式轉換後的文件,執行 make distclean 之後 應該清除所有這些檔案,只留下原始檔。
變數:
#定義變數
PROJECT = test_projet
#變數追加值
PROJECT += $(AUTHOR)
#立即展開的變數
AUTHOR := A Been
• $@,表示規則中的目標。
• $<,表示規則中的第一個條件。
• $?,表示規則中所有比目標新的條件,組成一個列表,以空格分隔。
• $^,表示規則中的所有條件,組成一個列表,以空格分隔。
示例:
all: main
main: test.c
gcc test.c
clean:
@echo cleanning $(PROJECT) project
-rm *.out
@echo clean completed
install:
@echo install project
@echo install completed
.PHONY: clean
#定義變數
PROJECT = test_projet
#變數追加值
PROJECT += $(AUTHOR)
#立即展開的變數
AUTHOR := A Been