001_Makefile的引入及規則
使用keil, mdk, avr等工具開發程序時點點鼠標就可以編譯了,
它的內部機制是什麼?它怎麼組織管理程序?怎麼決定編譯哪一個文件?
gcc -o test a.c b.c
// 簡單,
// 但是會對所有文件都處理一次,
// 文件多時如果只修改其中一個文件會導致效率低
Makefile的核心---規則 :
目標 : 依賴1 依賴2 ...
[TAB]命令當"目標文件"不存在,
或
某個依賴文件比目標文件"新",
則: 執行"命令"
002_Makefile的語法
a. 通配符: %.o
$@ 表示目標
$< 表示第1個依賴文件
$^ 表示所有依賴文件b. 假想目標: .PHONY
c. 即時變量、延時變量, export
簡單變量(即時變量) :
A := xxx # A的值即刻確定,在定義時即確定
B = xxx # B的值使用到時才確定:= # 即時變量
= # 延時變量
?= # 延時變量, 如果是第1次定義才起效, 如果在前面該變量已定義則忽略這句
+= # 附加, 它是即時變量還是延時變量取決於前面的定義
003_Makefile函數
a. $(foreach var,list,text)
b. $(filter pattern...,text) # 在text中取出符合patten格式的值
$(filter-out pattern...,text) # 在text中取出不符合patten格式的值c. $(wildcard pattern) # pattern定義了文件名的格式,
# wildcard取出其中存在的文件
d. $(patsubst pattern,replacement,$(var)) # 從列表中取出每一個值
# 如果符合pattern
# 則替換爲replacement
004_Makefile實例
gcc -M c.c // 打印出依賴
gcc -M -MF c.d c.c // 把依賴寫入文件c.d
gcc -c -o c.o c.c -MD -MF c.d // 編譯c.o, 把依賴寫入文件c.d
b. 添加CFLAGS
作爲小白,學習記錄,希望也能成爲專業人士
後記:https://blog.csdn.net/xiaohu1996/article/details/105597892