Makefile 學習2

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章