目錄
1.makefile
1.1makefile的規則
1.2兩個函數
1.3三個自動變量
1.3.1普通變量 (自定義變量)
1.3.2自動變量
1.3.3其他關鍵字
- ALL/all
- clean
1.makefile
- 作用:進行項目管理。
- 初步學習:1個規則、2個函數、3個自動變量。
- 要想使用默認的make命令,管理項目。makefile文件名:必須是 “makefile”? 或 “Makefile”
1.1makefile的規則
語法:
目標:依賴條件
(一個tab縮進)命令
舉例:
- 目標的時間,必須晚于依賴條件的時間,否則,更新目標。
- 依賴條件,如果不存在,尋找新的規則去產生依賴條件。
舉例:
1.2兩個函數
wildcard 函數:用來匹配文件名,得到字符串
src = $(wildcard ./*.c)? : 匹配當前工作目錄下的所有.c文件。將文件名組成列表,賦值給變量 src
??? 相當于: src = add.c sub.c mul.c
patsubst 函數:用來字符串替換
obj = $(patsubst %.c, %.o, $(src)) : 將 參3 中,包含 參1的部分,替換為 參2.
??? 相當于: obj = add.o sub.o mul.o
obj = $(patsubst %.c, %, $(src))
??? 相當于: obj = add sub mul
舉例:
可以替換為:
1.3三個自動變量
1.3.1普通變量 (自定義變量)
- 定義變量語法:變量名 = 變量值? (都是字符串)
??? - 舉例:foo = abc
- 取變量值語法:$(變量)
??? - 舉例:bar = $(foo)? ===>? bar = abc
- makefile 自帶變量:
??? - CC = cc
??? - CPPFLAGES
??? - CFLAGES
??? - LDFLAGES
1.3.2自動變量
- $@: 在規則的命令中,表示規則中的目標。
替換為
- $^:? 在規則的命令中,表示所有依賴條件。
- $<:? 在規則的命令中,表示第一個依賴條件。如果將該變量應用在 “模式規則” 中,它可以將依賴條件列表中的每一個依賴,依次取出,套用模式規則。
替換為
1.3.3其他關鍵字
- ALL/all: ?
??? - 用來給 makefile 文件,指定 “終極目標”。
??? - makefile 文件,默認的規則為:從上而下,碰到的第一個 規則中的目標,為 “終極目標”。我們可以使用 ALL 指定終極目標。
- clean:
??? - 用來 借助 makefile 清除項目中的指定文件。如:*.o、a.out
??? - 舉例:
??? ????????
1.4模式規則
- 可以將makefile文件中,具有嚴格統一格式的規則,使用模式規則代替。要求模式規則中,只能使用 “$<” 符號。
- 靜態模式規則:
??? - 將模式規則,指定給某一個變量使用。
?$(obj):%.o:%.c
????? gcc -c $< -o $@
1.5偽目標
- 針對,殘缺的規則,也能使之生成目標。
makefile
.PHONY:clean ALL
1.6 其他參數
- -n:模擬執行 makefile ,不真正執行!推薦首次編寫 makefile 完成時,使用!!!
- -f:指定命名為 非 “makefile” 的文件。執行make命令
1.7完成版
src = $(wildcard *.c)?????????????????? ?
obj = $(patsubst %.c, %.o, $(src))?????? ?
# 使用gcc 覆蓋 cc
CC = gcc
target = app
ALL:$(target)
$(target):$(obj)?????????? ?
??? $(CC) $^ -o $@
$(obj):%.o:%.c
??? $(CC) -c $< -o $@
clean:
??? -rm -rf $(obj) $(target)
.PHONY:clean ALL