小編給大家分享一下linux中make的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)新互聯(lián)IDC提供業(yè)務(wù):成都服務(wù)器托管,成都服務(wù)器租用,成都服務(wù)器托管,重慶服務(wù)器租用等四川省內(nèi)主機(jī)托管與主機(jī)租用業(yè)務(wù);數(shù)據(jù)中心含:雙線機(jī)房,BGP機(jī)房,電信機(jī)房,移動機(jī)房,聯(lián)通機(jī)房。
規(guī)則是指示 make
應(yīng)該如何并且何時構(gòu)建一個被稱作為目標(biāo)的文件的指令。目標(biāo)可以依賴于其它被稱作為前提的文件。
你會指示 make
如何按步驟構(gòu)建目標(biāo),那就是一套按照出現(xiàn)順序一次執(zhí)行一個的 shell 命令。語法像這樣:
target_name : prerequisites recipe
一但你定義好了規(guī)則,你就可以通過從命令行執(zhí)行以下命令構(gòu)建目標(biāo):
$ make target_name
目標(biāo)一經(jīng)構(gòu)建,除非前提改變,否則 make
會足夠聰明地不再去運(yùn)行該步驟。
前提表明了兩件事情:
當(dāng)目標(biāo)應(yīng)當(dāng)被構(gòu)建時:如果其中一個前提比目標(biāo)更新,make
假定目的應(yīng)當(dāng)被構(gòu)建。
執(zhí)行的順序:鑒于前提可以反過來在 makefile 中由另一套規(guī)則所構(gòu)建,它們同樣暗示了一個執(zhí)行規(guī)則的順序。
如果你想要定義一個順序但是你不想在前提改變的時候重新構(gòu)建目標(biāo),你可以使用一種特別的叫做“唯順序”的前提。這種前提可以被放在普通的前提之后,用管道符(|
)進(jìn)行分隔。
為了便利,make
接受目標(biāo)和前提的樣式。通過包含 %
符號可以定義一種樣式。這個符號是一個可以匹配任何長度的文字符號或者空隔的通配符。以下有一些示例:
%
:匹配任何文件
%.md
:匹配所有 .md
結(jié)尾的文件
prefix%.go
:匹配所有以 prefix
開頭以 .go
結(jié)尾的文件
有一系列目標(biāo)名字,它們對于 make
來說有特殊的意義,被稱作特殊目標(biāo)。
你可以在這個文檔發(fā)現(xiàn)全套特殊目標(biāo)。作為一種經(jīng)驗法則,特殊目標(biāo)以點開始后面跟著大寫字母。
以下是幾個有用的特殊目標(biāo):
.PHONY
:向 make
表明此目標(biāo)的前提可以被當(dāng)成偽目標(biāo)。這意味著 make
將總是運(yùn)行,無論有那個名字的文件是否存在或者上次被修改的時間是什么。
.DEFAULT
:被用于任何沒有指定規(guī)則的目標(biāo)。
.IGNORE
:如果你指定 .IGNORE
為前提,make
將忽略執(zhí)行步驟中的錯誤。
當(dāng)你需要以你指定的改動方式改變一個變量的值,替代就十分有用了。
替代的格式是 $(var:a=b)
,它的意思是獲取變量 var
的值,用值里面的 b
替代詞末尾的每個 a
以代替最終的字符串。例如:
foo := a.obar : = $(foo:.o=.c) # sets bar to a.c
注意:特別感謝 Luis Lavena 讓我們知道替代的存在。
檔案文件是用來一起將多個數(shù)據(jù)文檔(類似于壓縮文件的概念)收集成一個文件。它們由 ar
Unix 工具所構(gòu)建。ar
可以用于為任何目的創(chuàng)建檔案,但除了靜態(tài)庫,它已經(jīng)被 tar
大量替代。
在 make
中,你可以使用一個檔案文件中的單獨一個成員作為目標(biāo)或者前提,就像這樣:
archive(member) : prerequisite recipe
以上是“l(fā)inux中make的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!