【Linux C】第八章 Makefile

Makefile相當於腳本語言。目的在於自動化編譯。去執行是由所編譯文件的依賴關係驅動。

1.        Makefile文件的組成內容

a)        顯示規則:說明生成目標文件的方法和步驟。顯示指出文件依賴關係。

b)        隱式規則:makefile本身自動推到規則。

c)        變量定義:類似C宏定義(類似shell 變量)。

d)        文件指示:引用其他makefile,制定makefile有效部分,定義多行的命令。

e)        註釋 # 

2.        Make命令自動當前目錄下尋找makefile

a)        Make  –f  <文件名> 可以用戶指定makefile

b)        make –I 或者 make –include-dir可以制定makefile目錄

c)        make也會在/usr/local/bin或/usr/include下尋找目錄中包含的文件。

d)        make –include <filename> 未找到文件時不報錯。

3.        make退出碼

a)        0 表示makefile文件成功執行。

b)        1表示makefile文件執行出現錯誤。

c)        2表示在make –q 選項下一些目標不需要更新。

4.        規則形式

targets : prerequisites

command

……

5.        Make認爲目標文件依賴文件需要更新有三個條件(沒有生成,修改時間晚,本身要更新)。

6.        隱式規則:make自動使用gcc –c 命令講.c編譯成同名的.o文件。

7.        .PHONY:標號  表示該目標爲僞目標,不生成文件。第一個目標爲默認目標,一般爲all。

8.        Makefile允許使用通配符,如*.c。

9.        Vpath變量實現搜索源文件的功能。若無,則在當前目錄下尋找,若有,則在制定目錄。

a)        eg.  vpath = ./src:../include

b)        制定模式   vpath <pattern>  <directories>    eg. vpath %.c /src  %通配符表示匹配若干個字符數大於零的字符。

10.    Make會把使用的命令顯示出來。

a)        命令前加@字符,會執行但不顯示。

b)        Make –n 或 make –just-print則只是顯示命令但是不執行(用於debug)不管有沒有@。

c)        當makefile中想讓上一條shell命令結果用在一條命令中時,用分號連接兩命令。 eg.  cd /home/admin;pwd        

11.    Makefile中命令退出碼非零,則中止執行當前規則。

a)        命令行前加上—,則忽視該命令執行結果的判斷。

b)        Make –I 或者 make –ignore-errors可以忽視所有命令的退出碼。

c)        某標號以.IGNORE聲明作爲目標。則該目標中的所有命令將會忽略退出碼檢測。

12.    使用變量 $(varname) 。爲避免重意,$用$$表示。

13.    變量可以傳遞。

a)        := 避免遞歸定義

b)        ?=若定義過則不賦值。

c)        +=追加變量定義

d)        自動化變量 $@, $%, $< , $? , $^ , $+ , $*

14.    使用判定條件

a)        <conditional-directive>

 <text if true >

else

<text if faulse>

endif

b)        Ifeq若關鍵字相等則執行。

c)        Ifneq若關鍵字不相等則執行。

d)        Ifdef若關鍵字非空則執行,ifndef若關鍵字爲空則執行。

15.    使用函數

a)        語法: $(<function> <arguments>)  或 ${<function><arguments>}

b)        字符串處理函數: subst, patsubst,strip,findstring,filter,filter-out,sort,word,wordlist,words,

c)        Shell 函數: $(shell<command>,<parameter1>,<parameter2>…….)

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