【makefile學習記錄2】初識makefile結構
阿新 • • 發佈:2018-11-26
1、makefile的意義及定義:
用於定義原始檔間的依賴關係(通過自己特定的語法),通過這種依賴關係來說明如何編譯各個原始檔並生成可執行檔案。
依賴的定義:(①定義依賴規則時,依賴條件可以省略②可以把command1不用,此時分號可去掉)
targets : prerequisite ; command1
'\t' command2
makefile中的元素含義:
- targets:
- 通常是需要生成的目標檔名
- make所需執行的命令名稱
- prerequisites:
- 當前目標所依賴的其他目標或檔案
- command:
- 完成目標所需要執行的命令
規則中的注意事項:
- targets可以包含多個目標,使用空格對多個目標進行分隔
- prerequisite可以包含多個依賴,使用空格對多個依賴進行分隔
- 【Tab】鍵:'\t' 每一個命令列必須以【Tab】字元開始,【Tab】字元告訴make此行是命令列
- 續行符:\ 可以將內容分開寫到下一行,提高可讀性
2、一個makefile的依賴示例
本例中,目標
所對應的依賴關係為:
程式執行結果為:
若想要將 echo "make all"此類命令變成無回顯字元,則在命令前加上(兩者之間無空格)"@"符號:(這是一個小技巧)
執行結果為:
依賴規則:
- 當目標所對應的檔案埠村子啊,執行對應命令;
- 當依賴在時間上比目標更(四聲)新,執行對應命令;
- 當依賴關係連續發生時,對比依賴鏈上的每一個目標。
比如:有.c原始檔,.o二進位制檔案及可執行程式時,此時,.c是.o的依賴,.o是可執行程式的依賴。當各自的依賴發生改變時,執行目標對應的命令。當不發生改變時,執行make時也不執行相應命令。
3、第一個make的編譯案例
makefile為:
即可知道如下圖所示的依賴關係:
fun.c檔案為:
main.c檔案為:
執行make:
可以看到所對應的命令,並且生成hello.out可執行檔案。
再次執行make,提示hello.out已經是最新的了,不執行命令。執行hello.out時,是一樣的效果。但是當執行make all 時,執行所對應的命令,因為 all 是一個目標,但不是一個檔案,所以會去執行。
當改變fun.c檔案內容時,執行make。發現只有所改變的才會重新執行,main.o和main.c之間的依賴關係並沒有發生變化,所以不執行。