1:makelinux
gcc 編譯器app
make - linux自帶的構建器函數
構建的規則在makefile中spa
2:makefile文件的命名code
makefileblog
Makefileget
3:makefile中的規則編譯器
gcc a.c b.c c.c -o app編譯
I:三部分:目標,依賴,命令class
目標:依賴
(Tab縮減)命令
eg: app:a.c b.c c.c
gcc a.c b.c c.c -o app
II:makefile中能夠🈶一條或多條規則組成
4:makefile的編寫
版本一:
eg: app:a.c b.c c.c
gcc a.c b.c c.c -o app
版本二:
app:main.o add.o gcc main.o add.o-o app main.o:main.c gcc main.c -c add.o:add.c gcc add.c -c
makefile工做原理:
->:檢查依賴是否存在:
->:向下搜索下邊的規則,若是有規則則用來生成查找的依賴,執行規則中的命令
->:依賴存在,則判斷是否須要更新
->:原則:目標的時間 > 依賴的時間
反之,則更新
版本三:
(1):自定義變量:obj = a.o b.o c.o
變量的取值:aa = $(obj)
(2):makefile自帶的變量:大寫
CPPFLAGS
CC
(3)自動變量:
$@: 規則中的目標
$<: 規則中的第一個依賴
$^: 規則中全部的依賴
只能在規則的 命令中使用
obj = main.o add.o sub.o mul.o target = app $(target):$(obj) gcc $(obj) -o $(target) %.o:%.c gcc -c $< -o $@
模式匹配:
%.o %.c
gcc $(obj) -o $(target) -> gcc $^ -o $@
5:makefile中的函數(可移植)
makefile中全部的函數都是有返回值
(1):查到指定目錄下邊指定類型的文件
->wildcard
eg: src = $(wildcard ./*.c)
(2):匹配替換
->patsubst
eg:obj: $(patsubst %.c,%.o,$(src))
src = $(wildcard ./*.c) obj = $(patsubst %.c,%.oc$(src)) target = app $(target):$(obj) gcc $^ -o $@ %.o:%.c gcc -c $< -o $@
6:清理項目
clean:
-rm $(obj) $(target) -f
聲明僞目標:
.PHONY : clean
clean:
-rm $(obj) $(target) -f