freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

linuxmake使用手冊(cè)(編輯修改稿)

2025-07-26 08:02 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 更新,所以當(dāng)您使用‘t’或‘touch’選項(xiàng)時(shí),您不要使用過時(shí)的makefile文件來決定‘touch’哪個(gè)目標(biāo)(具體含義參閱代替執(zhí)行命令)。同樣,因?yàn)椤畄39。 (或 ‘question39。) 和 ‘n39。 (或 ‘justprint39。)也能不阻止更新makefile文件,所以過時(shí)的makefile文件對(duì)其它的目標(biāo)將產(chǎn)生錯(cuò)誤的輸出結(jié)果。如,‘make f mfile n foo’命令將這樣執(zhí)行:更新‘mfile’,然后讀入,再輸出更新‘foo’的命令和依賴,但并不執(zhí)行更新‘foo’,注意,所有回顯的更新‘foo’的命令是在更新后的‘mfile’中指定的。在實(shí)際使用過程中,您一定會(huì)遇見確實(shí)希望阻止更新makefile文件的情況。如果這樣,您可以在makefile文件命令行中將需要更新的makefile文件指定為目標(biāo),如此則可阻止更新makefile文件。一旦makefile文件名被明確指定為一個(gè)目標(biāo),選項(xiàng)‘t’等將會(huì)對(duì)它發(fā)生作用。如這樣設(shè)定,‘make f mfile n foo’命令將這樣執(zhí)行:讀入‘mfile’,輸出更新‘foo’的命令和依賴,但并不執(zhí)行更新‘foo’?;仫@的更新‘foo’的命令包含在現(xiàn)存的‘mfile’中。 重載其它makefile文件有時(shí)一個(gè)makefile文件和另一個(gè)makefile文件相近也是很有用的。您可以使用‘include’指令把更多的makefile文件包含進(jìn)來,如此可加入更多的目標(biāo)和定義的變量。然而如果兩個(gè)makefile文件對(duì)相同的目標(biāo)給出了不同的命令,make就會(huì)產(chǎn)生錯(cuò)誤。在主makefile文件(要包含其它makefile文件的那個(gè))中,您可以使用通配符格式規(guī)則說明只有在依靠當(dāng)前makefile文件中的信息不能重新創(chuàng)建目標(biāo)時(shí),make才搜尋其它的makefile文件,詳細(xì)內(nèi)容參見定義與重新定義格式規(guī)則。例如:如果您有一個(gè)說明怎樣創(chuàng)建目標(biāo)‘foo’(和其它目標(biāo))的makefile文件稱為‘Makefile’,您可以編寫另外一個(gè)稱為‘GNUmakefile’的makefile文件包含以下語(yǔ)句:foo: frobnicate foo%: force @$(MAKE) f Makefile $@force: 。如果鍵入‘make foo’,make就會(huì)找到‘GNUmakefile’,讀入,然后運(yùn)行‘frobnicate foo’。如果鍵入‘make bar’,make發(fā)現(xiàn)無(wú)法根據(jù)‘GNUmakefile’創(chuàng)建‘bar’,它將使用格式規(guī)則提供的命令:‘make –f Makefile bar’。如果在‘Makefile’中提供了‘bar’更新的規(guī)則,make就會(huì)使用該規(guī)則。對(duì)其它‘GNUmakefile’不提供怎樣更新的目標(biāo)make也會(huì)同樣處理。這種工作的方式是使用了格式規(guī)則中的格式匹配符‘%’,它可以和任何目標(biāo)匹配。該規(guī)則指定了一個(gè)依賴‘force’,用來保證命令一定要執(zhí)行,無(wú)論目標(biāo)文件是否存在。我們給出的目標(biāo)‘force’時(shí)使用了空命令,這樣可防止make按照隱含規(guī)則搜尋和創(chuàng)建它,否則,make將把同樣的匹配規(guī)則應(yīng)用到目標(biāo)‘force’本身,從而陷入創(chuàng)建依賴的循環(huán)中。 make讀取makefile文件的過程GNU make把它的工作明顯的分為兩個(gè)階段。在第一階段,make讀取makefile文件,包括makefile文件本身、內(nèi)置變量及其值、隱含規(guī)則和具體規(guī)則、構(gòu)造所有目標(biāo)的依靠圖表和它們的依賴等。在第二階段,make使用這些內(nèi)置的組織決定需要重新構(gòu)造的目標(biāo)以及使用必要的規(guī)則進(jìn)行工作。了解make兩階段的工作方式十分重要,因?yàn)樗苯佑绊懽兞?、函?shù)擴(kuò)展方式;而這也是編寫makefile文件時(shí)導(dǎo)致一些錯(cuò)誤的主要來源之一。下面我們將對(duì)makefile文件中不同結(jié)構(gòu)的擴(kuò)展方式進(jìn)行總結(jié)。我們稱在make工作第一階段發(fā)生的擴(kuò)展是立即擴(kuò)展:在這種情況下,make對(duì)makefile文件進(jìn)行語(yǔ)法分析時(shí)把變量和函數(shù)直接擴(kuò)展為結(jié)構(gòu)單元的一部分。我們把不能立即執(zhí)行的擴(kuò)展稱為延時(shí)擴(kuò)展。延時(shí)擴(kuò)展結(jié)構(gòu)直到它已出現(xiàn)在上下文結(jié)構(gòu)中或make已進(jìn)入到了第二工作階段時(shí)才執(zhí)行展開。您可能對(duì)這一部分內(nèi)容不熟悉。您可以先看完后面幾章對(duì)這些知識(shí)熟悉后再參考本節(jié)內(nèi)容。變量賦值變量的定義語(yǔ)法形式如下:immediate = deferredimmediate ?= deferredimmediate := immediateimmediate += deferred or immediatedefine immediate deferredendef對(duì)于附加操作符‘+=’,右邊變量如果在前面使用(:=)定義為簡(jiǎn)單擴(kuò)展變量則是立即變量,其它均為延時(shí)變量。條件語(yǔ)句整體上講,條件語(yǔ)句都按語(yǔ)法立即分析,常用的有:ifdef、ifeq、ifndef和inneq。定義規(guī)則規(guī)則不論其形式如何,都按相同的方式擴(kuò)展。immediate : immediate 。 deferred deferred目標(biāo)和依賴部分都立即擴(kuò)展,用于構(gòu)造目標(biāo)的命令通常都是延時(shí)擴(kuò)展。這個(gè)通用的規(guī)律對(duì)具體規(guī)則、格式規(guī)則、后綴規(guī)則、靜態(tài)格式規(guī)則和簡(jiǎn)單依賴定義都適用。4編寫規(guī)則makefile文件中的規(guī)則是用來說明何時(shí)以及怎樣重建特定文件的,這些特定的文件稱為該規(guī)則的目標(biāo)(通常情況下,每個(gè)規(guī)則只有一個(gè)目標(biāo))。在規(guī)則中列舉的其它文件稱為目標(biāo)的依賴,同時(shí)規(guī)則還給出了目標(biāo)創(chuàng)建、更新的命令。一般情況下規(guī)則的次序無(wú)關(guān)緊要,但決定缺省最終目標(biāo)時(shí)卻是例外。缺省最終目標(biāo)是您沒有另外指定最終目標(biāo)時(shí),make認(rèn)定的最終目標(biāo)。缺省最終目標(biāo)是makefile文件中的第一條規(guī)則的目標(biāo)。如果第一條規(guī)則有多個(gè)目標(biāo),只有第一個(gè)目標(biāo)被認(rèn)為是缺省最終目標(biāo)。有兩種例外的情況:以句點(diǎn)(‘.’)開始的目標(biāo)不是缺省最終目標(biāo)(如果該目標(biāo)包含一個(gè)或多個(gè)斜杠‘/’,則該目標(biāo)也可能是缺省最終目標(biāo));另一種情況是格式規(guī)則定義的目標(biāo)不是缺省最終目標(biāo)(參閱定義與重新定義格式規(guī)則)。所以,我們編寫makefile文件時(shí),通常將第一個(gè)規(guī)則的目標(biāo)定為編譯全部程序或是由makefile文件表述的所有程序(經(jīng)常設(shè)定一個(gè)稱為‘a(chǎn)ll’的目標(biāo))。參閱指定最終目標(biāo)的參數(shù)。通常一條規(guī)則形式如下:targets : prerequisites mand ...或: targets : prerequisites 。 mand mand ...目標(biāo)(target)是文件的名稱,中間由空格隔開。通配符可以在文件名中使用(參閱在文件名中使用通配符),‘a(chǎn)(m)’形式的文件名表示成員m在文件a中(參閱檔案成員目標(biāo))。一般情況下,一條規(guī)則只有一個(gè)目標(biāo),但偶爾由于其它原因一條規(guī)則有多個(gè)目標(biāo)(參閱具有多個(gè)目標(biāo)的規(guī)則)。命令行以Tab字符開始,第一個(gè)命令可以和依賴在一行,命令和依賴之間用分號(hào)隔開,也可以在依賴下一行,以Tab字符為行的開始。這兩種方法的效果一樣,參閱在規(guī)則中使用命令。因?yàn)槊涝?hào)已經(jīng)用為變量引用的開始符,如果您真希望在規(guī)則中使用美元符號(hào),您必須連寫兩次,‘$$’(參閱使用變量)。您可以把一長(zhǎng)行在中間插入‘\’使其分為兩行,也就是說,一行的尾部是’\’的話,表示下一行是本行的繼續(xù)行。但這并不是必須的,make沒有對(duì)makefile文件中行的長(zhǎng)度進(jìn)行限制。一條規(guī)則可以告訴make兩件事情:何時(shí)目標(biāo)已經(jīng)過時(shí),以及怎樣在必要時(shí)更新它們。判斷目標(biāo)過時(shí)的準(zhǔn)則和依賴關(guān)系密切,依賴也由文件名構(gòu)成,文件名之間由空格隔開,通配符和檔案成員也允許在依賴中出現(xiàn)。一個(gè)目標(biāo)如果不存在或它比其中一個(gè)依賴的修改時(shí)間早,則該目標(biāo)已經(jīng)過時(shí)。該思想來源于目標(biāo)是根據(jù)依賴的信息計(jì)算得來的,因此一旦任何一個(gè)依賴發(fā)生變化,目標(biāo)文件也就不再有效。目標(biāo)的更新方式由命令決定。命令由shell解釋執(zhí)行,但也有一些另外的特點(diǎn)。參閱在規(guī)則中使用命令。 在文件名中使用通配符一個(gè)簡(jiǎn)單的文件名可以通過使用通配符代表許多文件。Make中的通配符和Bourne shell中的通配符一樣是‘*’、‘?’和‘[…]’。例如:‘*.C’指在當(dāng)前目錄中所有以‘.C’結(jié)尾的文件。字符‘~’在文件名的前面也有特殊的含義。如果字符‘~’單獨(dú)或后面跟一個(gè)斜杠‘/’,則代表您的home目錄。如‘~/bin’擴(kuò)展為‘/home/bin’。 如果字符‘~’后面跟一個(gè)字,它擴(kuò)展為home目錄下以該字為名字的目錄,如‘~John/bin’表示‘home/John/bin’。在一些操作系統(tǒng)(如msdos,mswindows)中不存在home目錄,可以通過設(shè)置環(huán)境變量home來模擬。在目標(biāo)、依賴和命令中的通配符自動(dòng)擴(kuò)展。在其它上下文中,通配符只有在您明確表明調(diào)用通配符函數(shù)時(shí)才擴(kuò)展。通配符另一個(gè)特點(diǎn)是如果通配符前面是反斜杠‘\’,則該通配符失去通配能力。如‘foo\*bar’表示一個(gè)特定的文件其名字由‘foo’、‘*’和‘bar’構(gòu)成。 通配符可以用在規(guī)則的命令中,此時(shí)通配符由shell擴(kuò)展。例如,下面的規(guī)則刪除所有OBJ文件:clean: rm –f *.o 通配符在規(guī)則的依賴中也很有用。在下面的makefile規(guī)則中,‘make print’將打印所有從上次您打印以后又有改動(dòng)的‘.c’文件:print: *.c lpr p $? touch print本規(guī)則使用‘ptint’作為一個(gè)空目標(biāo)文件(參看使用空目標(biāo)文件記錄事件);自動(dòng)變量‘$?’用來打印那些已經(jīng)修改的文件,參看自動(dòng)變量。當(dāng)您定義一個(gè)變量時(shí)通配符不會(huì)擴(kuò)展,如果您這樣寫:objects = *.o變量objects的值實(shí)際就是字符串‘*.o’。然而,如果您在一個(gè)目標(biāo)、依賴和命令中使用變量objects的值,通配符將在那時(shí)擴(kuò)展。使用下面的語(yǔ)句可使通配符擴(kuò)展:objects=$(wildcard *.o)詳細(xì)內(nèi)容參閱函數(shù)wildcard。下面有一個(gè)幼稚使用通配符擴(kuò)展的例子,但實(shí)際上該例子不能完成您所希望完成的任務(wù)。假設(shè)可執(zhí)行文件‘foo’由在當(dāng)前目錄的所有OBJ文件創(chuàng)建,其規(guī)則如下:objects = *.ofoo : $(objects) cc o foo $(CFLAGS) $(objects)由于變量objects的值為字符串‘*.o’,通配符在目標(biāo)‘foo’的規(guī)則下擴(kuò)展,所以每一個(gè)OBJ文件都會(huì)變?yōu)槟繕?biāo)‘foo’的依賴,并在必要時(shí)重新編譯自己。但如果您已刪除了所有的OBJ文件,情況又會(huì)怎樣呢?因沒有和通配符匹配的文件,所以目標(biāo)‘foo’就依靠了一個(gè)有著奇怪名字的文件‘*.o’。因?yàn)槟夸浿胁淮嬖谠撐募?,make將發(fā)出不能創(chuàng)建‘*.o’的錯(cuò)誤信息。這可不是所要執(zhí)行的任務(wù)。實(shí)際上,使用通配符獲得正確的結(jié)果是可能的,但您必須使用稍微復(fù)雜一點(diǎn)的技術(shù),該技術(shù)包括使用函數(shù)wildcard和替代字符串等。詳細(xì)內(nèi)容將在下一節(jié)論述。微軟的操作系統(tǒng)(MSDOS、MSWINDOWS)使用反斜杠分離目錄路徑,如:C:\foo\bar\這和Unix風(fēng)格‘c:/foo/bar/’等價(jià)(‘c:’是驅(qū)動(dòng)器字母)。當(dāng)make在這些系統(tǒng)上運(yùn)行時(shí),不但支持在路徑中存在反斜杠也支持Unix風(fēng)格的前斜杠。但是這種對(duì)反斜杠的支持不包括通配符擴(kuò)展,因?yàn)橥ㄅ浞麛U(kuò)展時(shí),反斜杠用作引用字符。所以,在這些場(chǎng)合您必須使用Unix風(fēng)格的前斜杠。通配符在規(guī)則中可以自動(dòng)擴(kuò)展,但設(shè)置在變量中或在函數(shù)的參數(shù)中通配符一般不能正常擴(kuò)展。如果您需要在這些場(chǎng)合擴(kuò)展通配符,您應(yīng)該使用函數(shù)wildcard,格式如下:$(wildcard pattern...)可以在makefile文件的任何地方使用該字符串,應(yīng)用時(shí)該字符串被一列在指定目錄下存在的并且文件名和給出的文件名的格式相符合的文件所代替,文件名中間由空格隔開。如果沒有和指定格式一致的文件,則函數(shù)wildcard的輸出將會(huì)省略。注意這和在規(guī)則中通配符擴(kuò)展的方式不同,在規(guī)則中使用逐字?jǐn)U展方式,而不是省略方式(參閱上節(jié))。使用函數(shù)wildcard得到指定目錄下所有的C語(yǔ)言源程序文件名的命令格式為:$(wildcard *.c)我們可以把所獲得的C語(yǔ)言源程序文件名的字符串通過將‘.c’后綴變?yōu)椤?o’轉(zhuǎn)換為OBJ文件名的字符串,其格式為:$(patsubst %.c,%.o,$(wildcard *.c))這里我們使用了另外一個(gè)函數(shù):patsubst,詳細(xì)內(nèi)容參閱字符串替換和分析函數(shù)。這樣,一個(gè)編譯特定目錄下所有C語(yǔ)言源程序并把它們連接在一起的makefile文件可以寫成如下格式:objects := $(patsubst %.c,%.o,$(wildcard *.c))foo : $(objects) cc o foo $(objects)這里使用了編譯C語(yǔ)言源程序的隱含規(guī)則,因此沒有必要為每個(gè)文件寫具體編譯規(guī)則。 ‘:=’是‘=’的變異,對(duì)‘:=’的解釋,參閱兩種風(fēng)格的變量。對(duì)于大型系統(tǒng),把源文件安放在一個(gè)單獨(dú)的目錄中,而把二進(jìn)制文件放在另一個(gè)目錄中是十分常見的。Make 的目錄搜尋特性使自動(dòng)在幾個(gè)目錄搜尋依賴十分容易。當(dāng)您在幾個(gè)目錄中重新安排您的文件,您不必改動(dòng)單獨(dú)的規(guī)則,僅僅改動(dòng)一下搜尋路徑即可。 VPATH:所有依賴的搜尋路徑make變量VPATH的值指定了make搜尋的目錄。經(jīng)常用到的是那些包含依賴的目錄,并不是當(dāng)前的目錄;但VPATH指定了make對(duì)所有文件都適用的目錄搜尋序列,包括了規(guī)則的目標(biāo)所需要的文件。如果一個(gè)作為目標(biāo)或依賴的文件在當(dāng)前目錄中不存在,make就會(huì)在VPATH指定的目錄中搜尋該文件。如果在這些目錄中找到要尋找的文件,則就象這些文件在當(dāng)前目錄下存在一樣,規(guī)則把這些文件指定為依賴。參閱編寫搜尋目錄的shell命令。在VPATH變量定義中,目錄的名字由冒號(hào)或空格分開。目錄列舉的次序也是make 搜尋的次序。在MSDOS、MSWINDOWS系統(tǒng)中,VPAT
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1