1. 程式人生 > >【makefile學習記錄2】初識makefile結構

【makefile學習記錄2】初識makefile結構

1、makefile的意義及定義:

用於定義原始檔間的依賴關係(通過自己特定的語法),通過這種依賴關係來說明如何編譯各個原始檔並生成可執行檔案。

依賴的定義:(①定義依賴規則時,依賴條件可以省略②可以把command1不用,此時分號可去掉)

targets : prerequisite ; command1
'\t' command2

makefile中的元素含義:

  •  targets:   

  1.  通常是需要生成的目標檔名
  2. make所需執行的命令名稱

  •  prerequisites:

  1. 當前目標所依賴的其他目標或檔案

  •  command:

  1. 完成目標所需要執行的命令

規則中的注意事項:

  1. targets可以包含多個目標,使用空格對多個目標進行分隔
  2. prerequisite可以包含多個依賴,使用空格對多個依賴進行分隔
  3. 【Tab】鍵:'\t'      每一個命令列必須以【Tab】字元開始,【Tab】字元告訴make此行是命令列
  4.  續行符:\           可以將內容分開寫到下一行,提高可讀性

2、一個makefile的依賴示例

本例中,目標

all以來條件為目標test。


所對應的依賴關係為:


程式執行結果為:


若想要將 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之間的依賴關係並沒有發生變化,所以不執行。