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

正文內(nèi)容

makefile中文完全手冊(編輯修改稿)

2025-07-26 08:30 本頁面
 

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