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

正文內(nèi)容

make、編譯選項(xiàng)、連接問題(編輯修改稿)

2025-07-04 13:35 本頁面
 

【文章內(nèi)容簡(jiǎn)介】 ’.’開始。 一個(gè)規(guī)則多個(gè)目標(biāo)一條有多個(gè)目標(biāo)的規(guī)則和寫多條規(guī)則,每條一個(gè)目標(biāo)作用是等同的。同樣的命令應(yīng)用于所有目標(biāo),但其效用會(huì)因?qū)?shí)際目標(biāo)以’$@’代替而不同。規(guī)則中所有目標(biāo)的依賴關(guān)系是一樣的。這在兩種情況下有用:★只有依賴關(guān)系,不需要命令。例如: : ★ 所有的目標(biāo)同樣的命令。命令不需要完全相同,因?yàn)樵诿钪锌梢允褂谩?@’:bigoutput littleoutput : generate $(subst output,$@) $@和bigoutput : generate big bigoutputlittleoutput : generate little littleoutput等同。這里假設(shè)程序’generate’產(chǎn)生兩種輸出:一種使用’big’選項(xiàng),一種使用’little’選項(xiàng)。如果想象使用’$@’變化命令那樣來變化依賴關(guān)系,不能通過多目標(biāo)的普通規(guī)則實(shí)現(xiàn),但是可以通過模式規(guī)則來實(shí)現(xiàn)。 一個(gè)目標(biāo)多條規(guī)則一個(gè)文件可以是多條規(guī)則的目標(biāo),所有規(guī)則的依賴關(guān)系被合并。如果目標(biāo)比任一個(gè)依賴文件舊,命令被執(zhí)行。一個(gè)文件只能有一組命令執(zhí)行。如果多個(gè)規(guī)則對(duì)于同一個(gè)文件都給出了命令,make使用最后一組并打印錯(cuò)誤信息(特殊情況:如果文件名以’.’開始,并不打印錯(cuò)誤信息,這一點(diǎn)是為了和其它make兼容)。沒有任何理由需要將makefile寫成這樣,這是make給出錯(cuò)誤信息的理由。一條只有依賴關(guān)系的附加規(guī)則可以一次給出許多文件的附加依賴文件。例如’objects’變量表示系統(tǒng)中編譯器的所有輸出.,說明當(dāng)’’更改時(shí)所有文件必須重做的簡(jiǎn)單方法如下: objects = : : $(objects) : 不用改變實(shí)際目標(biāo)文件生成的規(guī)則,這條規(guī)則可以在需要增刪附加的依賴關(guān)系時(shí)插入或提出。另一個(gè)訣竅是附加的依賴關(guān)系可以用變量表示,在make執(zhí)行時(shí),可以給變量賦值:extradeps=$(objects) : $(extradeps)當(dāng)命令`make extradeps=39。執(zhí)行時(shí)會(huì)認(rèn)為’’是每個(gè)目標(biāo)文件的依賴文件,但簡(jiǎn)單的’make’命令不是這樣。 靜態(tài)模式規(guī)則靜態(tài)模式規(guī)則(static pattern rules)可以指定多個(gè)目標(biāo),并且使用目標(biāo)名字來建議依賴文件的名字;比普通多目標(biāo)規(guī)則更通用因?yàn)椴恍枰蕾囮P(guān)系是相同的:依賴關(guān)系必須類似但不需要相同。 語法TARGETS ...: TARGETPATTERN: DEPPATTERNS ... COMMANDS ...TARGETS列表指出規(guī)則應(yīng)用的目標(biāo),可以包含通配符,于普通規(guī)則的目標(biāo)相同。TARGETPATTERN和DEPPATTERNS來表明目標(biāo)的依賴關(guān)系如何計(jì)算:匹配TARGETPATTERN的目標(biāo)從名字中抽出一部分,叫做詞干(stem),詞干被替換到DEPPATTERNS來形成依賴文件名。每個(gè)模式通常包含一個(gè)’%’字符。當(dāng)TARGETPATTERN匹配一個(gè)目標(biāo)時(shí),’%’字符可以匹配目標(biāo)名中的任何部分;這部分即是詞干,模式的其余部分必須完全匹配。例如’’匹配’%.o’,’foo’是詞干;目標(biāo)’’和’’并不匹配這個(gè)模式。目標(biāo)的依賴文件名通過將DEPPATTERNS中的’%’替換為詞干形成:如果依賴模式為’%.c’,在替換詞干’foo’可以得到’’。依賴模式中不包含’%’也是合法的,此依賴文件對(duì)所有的目標(biāo)均有效。如果需要在模式規(guī)則中使用’%’字符,必須在其前面加’\’字符,如果’%’前的’\’字符是有實(shí)際意義的,必須在其前面加’\’,其它的’\’不必如此處理。如’the\%weird\\%pattern\\’在有效的’%’前是’the%weird\’,其后是’pattern\\’。最后的’\\’保持原樣是因?yàn)槠洳⒉挥绊憽?’字符。以下例子從相應(yīng)的’.c’文件編譯’’和’’:objects = $(objects): %.o: %.c $(CC) c $(CFLAGS) $ o $@每個(gè)目標(biāo)必須匹配目標(biāo)模式,對(duì)于不匹配的目標(biāo)會(huì)給出警告。如果列表中只有部分文件匹配模式,可以使用filter函數(shù)移去不匹配的文件名:files = $(filter %.o,$(files)): %.o: %.c $(CC) c $(CFLAGS) $ o $@$(filter %.elc,$(files)): %.elc: %.el emacs f batchbytepile $例子中`$(filter %.o,$(files))39。 結(jié)果是` ’; `$(filter %.elc,$(files))39。 的結(jié)果是`39。以下例子說明’$*’的使用:bigoutput littleoutput : %output : generate $* $@命令`generate39。執(zhí)行時(shí),’$*’擴(kuò)展為詞干’big’或’little’。 靜態(tài)模式規(guī)則和隱式規(guī)則靜態(tài)模式規(guī)則和隱式規(guī)則在作為模式規(guī)則是具有很多共同點(diǎn),都有目標(biāo)模式和構(gòu)造依賴文件名的模式,不同之處在于make決定何時(shí)應(yīng)用規(guī)則的方法。隱式規(guī)則可應(yīng)用于匹配其模式的任何目標(biāo),但只限于沒有指定命令的目標(biāo),如果有多條可應(yīng)用的隱式規(guī)則,只有一條被使用,取決于規(guī)則的順序。反之,靜態(tài)模式規(guī)則適用于規(guī)則中明確目標(biāo)列表,不適用于其它目標(biāo)且總是適用于指定的每個(gè)目標(biāo)。如果有兩條沖突的規(guī)則,且都有命令,這是一個(gè)錯(cuò)誤。靜態(tài)模式規(guī)則比隱式規(guī)則優(yōu)越之處如下:★ 可為一些不能按句法分類,但可以顯式列出的文件重載隱式規(guī)則★ 不能判定目錄中的精確內(nèi)容,一些無關(guān)的文件可能導(dǎo)致make適用錯(cuò)誤的隱式規(guī)則;最終結(jié)果可能依賴于隱式規(guī)則的次序。適用靜態(tài)模式規(guī)則時(shí),這種不確定性是不存在的:規(guī)則適用于明確指定的目標(biāo)。 雙冒號(hào)規(guī)則雙冒號(hào)規(guī)則(Doublecolon rules)的目標(biāo)后是’::’而不是’:’,當(dāng)一個(gè)目標(biāo)出現(xiàn)在多條規(guī)則中時(shí),其處理和普通規(guī)則的處理不同。當(dāng)一個(gè)目標(biāo)出現(xiàn)在多條規(guī)則中時(shí),所有規(guī)則必須是相同類型的:都是普通的或者都是雙冒號(hào)的。如果是雙冒號(hào),規(guī)則之間相互獨(dú)立;如果目標(biāo)需要更新,則規(guī)則的命令被執(zhí)行;結(jié)果可能是沒有執(zhí)行,或者執(zhí)行了其中一些,或者所有的規(guī)則都執(zhí)行了。同一目標(biāo)的雙冒號(hào)規(guī)則事實(shí)是完全孤立的,每條規(guī)則被被單獨(dú)處理,就象不同目標(biāo)的規(guī)則一樣;規(guī)則按照在makefile中出現(xiàn)的次序被處理,此類規(guī)則真正有意義的是那些于命令執(zhí)行次序無關(guān)的。這種規(guī)則有時(shí)比較晦澀不是特別有用;它提供了一種機(jī)制:通過不同依賴文件的更新來對(duì)目標(biāo)進(jìn)行不同的處理,這種情形很罕見。每個(gè)這種規(guī)則應(yīng)當(dāng)提供命令,如果沒有,適用的隱式規(guī)則將使用。 自動(dòng)生成依賴關(guān)系在makefile中,許多規(guī)則都是一些目標(biāo)文件依賴于一些頭文件。例如:’’ 通過’include’使用’’,這樣規(guī)則:: 告訴make在’’變化時(shí)更新’’。在程序比較大時(shí),需要寫許多這樣的規(guī)則;而且當(dāng)每次增刪’include’時(shí),必須小心的更新makefile。許多現(xiàn)代的編譯器可以幫你寫這些規(guī)則,通常這是通過編譯器的’M’選項(xiàng),例如命令:cc –M 輸出以下內(nèi)容: : 這樣就不必寫這些規(guī)則,有編譯器代勞了。注意這樣的依賴關(guān)系中提及’’,不會(huì)被隱式規(guī)則認(rèn)為是中間文件,這意味這make在使用過它之后不會(huì)將其刪除。使用老的’make’程序時(shí),習(xí)慣做法是使用’make depend’命令利用編譯器的功能產(chǎn)生依賴關(guān)系,該命令會(huì)產(chǎn)生一個(gè)’depend’文件包含所有自動(dòng)產(chǎn)生的依賴關(guān)系,然后在makefile中使用’include’將其讀入。使用GNU的make時(shí),重新生成makefile的功能使得這種做法變得過時(shí):從不需要顯式請(qǐng)求更新依賴關(guān)系,因?yàn)樗偸侵匦律扇魏芜^時(shí)的makefile。自動(dòng)依賴關(guān)系生成推薦的做法是對(duì)每個(gè)源文件做一個(gè)makefile。對(duì)每個(gè)源文件’’,有一個(gè)makefile ’’,其中列出了目標(biāo)文件’’依賴的所有文件,這樣在源文件更新時(shí),需要掃描來產(chǎn)生新的依賴關(guān)系。例子是一個(gè)從’’產(chǎn)生依賴關(guān)系文件’’的模式規(guī)則:%.d: %.c $(SHELL) ec 39。$(CC) M $(CPPFLAGS) $ \ | sed 39。\39。39。s/\($*\)\.o[ :]*/\1 $@/g39。\39。39。 $@39。e選項(xiàng)是當(dāng)$(CC)命令失敗時(shí)(exit狀態(tài)非0),shell立刻退出。通常shell的返回值是管道中最后一條命令(sed)的返回值,這樣make不會(huì)注意到編譯器出錯(cuò)。使用GNU的C編譯器時(shí)(gcc),可以用’MM’選項(xiàng)來代替’M’選項(xiàng),這樣省略系統(tǒng)頭文件的依賴關(guān)系?!痵ed’命令的目的是將 : 轉(zhuǎn)換為 : 這樣使得每個(gè)’.d’文件依賴于’.o’文件相應(yīng)源文件和頭文件,make則可以在原文間或頭文件變化時(shí)更新依賴關(guān)系文件。如果定義了生成’.d’文件的規(guī)則,可以使用’include’指令來讀入所有的文件:sources = include $(sources:.c=.d)例中使用替換變量來將源文件列表’ ’轉(zhuǎn)換為依賴關(guān)系文件的列表。因?yàn)椤?d’文件和其它文件一樣,不需要更多工作,make會(huì)在需要時(shí)重新生成它們。編寫命令規(guī)則的命令是由一一執(zhí)行的shell命令組成。除了以分號(hào)隔開寫在依賴關(guān)系后的命令,每個(gè)命令行必須以tab字符開始空行和注釋行可以出現(xiàn)在命令行中,處理時(shí)被忽略(注意:以tab字符開始的空行不是’空’行,是一條空命令)??梢栽诿钪惺褂萌魏纬绦颍@些程序是由$(SHELL)來執(zhí)行的。 回顯通常make打印出要執(zhí)行的命令,稱之為回顯,這和親自敲命令的現(xiàn)象是一樣的。當(dāng)行之前有’@’字符時(shí),命令不再回顯,字符’@’在傳遞給shell前丟棄。典型的用法是只對(duì)打印命令有效,比如’echo’命令:@echo About to make distribution files當(dāng)make使用’n’或’—justprint’選項(xiàng)時(shí),顯示要發(fā)生的一切,但不執(zhí)行命令。只有在這種情況下,即使命令以’@’開始,命令行仍然顯示出來。這個(gè)選項(xiàng)對(duì)查看make實(shí)際要執(zhí)行的動(dòng)作很有用?!畇’或’—silent’選項(xiàng)阻止make所有回顯,就象所有命令以’@’開始一樣;一條沒有依賴關(guān)系的’.SILENT’規(guī)則有相同的作用,但是’@’更加靈活。 執(zhí)行在需要執(zhí)行命令更新目標(biāo)時(shí),make為每一行創(chuàng)建一個(gè)子shell來執(zhí)行。這意味著諸如為進(jìn)程設(shè)置局部變量的shell命令’cd’(改變進(jìn)程的當(dāng)前目錄)不會(huì)影響以后的命令。如果需要’cd’影響下一個(gè)命令,將它們放在一行上用分號(hào)隔開,這樣make認(rèn)為是一條命令傳遞給shell程序(注意:這需要shell支持):foo : bar/lose cd bar。 gobble lose ../foo另一個(gè)形式使用續(xù)行符:foo : bar/lose cd bar。 \ gobble lose ../fooshell程序的名字是通過’SHELL’變量來取得的。(*UNIX)不象大多數(shù)變量,’SHELL’變量不是通過環(huán)境來設(shè)置的(即需要在makefile中設(shè)置),因?yàn)椤疭HELL’環(huán)境是個(gè)人選擇的,如果不同人的選擇會(huì)影響makefile的功能的話,這樣很糟糕。 并行執(zhí)行GNU make可以一次執(zhí)行幾條命令。通常make一次執(zhí)行一條命令,等待其返回,再執(zhí)行下一條。使用’j’或’—jobs’可以同時(shí)執(zhí)行多條命令。如果’j’后梗一個(gè)正數(shù),表示一次可以執(zhí)行的命令條數(shù);如果’j’之后沒有參數(shù),則不限制可執(zhí)行的命令數(shù)。缺省的數(shù)量是一。一個(gè)討厭的問題是如果同時(shí)執(zhí)行多條命令,它們的輸出會(huì)混在一起;另一個(gè)問題是兩個(gè)進(jìn)程不能從同一個(gè)設(shè)備獲得輸入。 錯(cuò)誤每條shell命令返回時(shí),make會(huì)檢查其返回狀態(tài)。如果命令執(zhí)行成功,則下一條命令被執(zhí)行,最后一條命令執(zhí)行完后,規(guī)則執(zhí)行結(jié)束。如果有錯(cuò)誤(返回非0狀態(tài)),make放棄當(dāng)前規(guī)則,也可能是所有規(guī)則。有時(shí)候命令執(zhí)行錯(cuò)誤并不是問題,比如使用’mkdir’命令確保目錄存在:如果目錄一存在,則’mkdir’會(huì)報(bào)告錯(cuò)誤,但仍希望make繼續(xù)。要忽略命令的錯(cuò)誤,在命令之前使用’‘字符,’‘字符在傳遞給shell之前被丟棄:clean: rm f *.o如果使用’i’或’—ignoreerrors’選項(xiàng),make會(huì)忽略所有命令產(chǎn)生的錯(cuò)誤;一條沒有依賴關(guān)系的’.IGNORE’規(guī)則有相同的作用,但’‘更靈活。在忽略錯(cuò)誤時(shí),make將錯(cuò)誤也認(rèn)為是成功,只是通知你命令的退出狀態(tài)和和錯(cuò)誤被忽略。如果make并未告知忽略錯(cuò)誤,在錯(cuò)誤發(fā)生時(shí),表明該目標(biāo)不能成功更新,直接或間接依賴于此的目標(biāo)當(dāng)然也不能成功;這些目標(biāo)的命令不會(huì)被執(zhí)行,因?yàn)槠湎葲Q條件不滿足。通常make會(huì)立即以非0狀態(tài)退出。然而,如果給定’k’或’—keepgoing’選項(xiàng),make在退出前會(huì)處理其它的依賴關(guān)系,進(jìn)行必要的更新。例如,在編譯一個(gè)目標(biāo)文件遇到錯(cuò)誤,’make k’會(huì)繼續(xù)編譯其它的目標(biāo)文件。通常認(rèn)為你的目的是更新指定的目標(biāo),當(dāng)make知道這是不可能時(shí),會(huì)立即報(bào)告失敗;’k’選項(xiàng)指示真正目的是測(cè)試更新程序的更多可能性:在編譯之前找出更多不相關(guān)的問題。如果命令失敗了,假設(shè)它更新的目標(biāo)文件,這個(gè)文件是不完整的不能使用-至少不是完全更新的。但文件的最后修改時(shí)間表明停已經(jīng)是最新的,下一次make運(yùn)行時(shí),不會(huì)再更新這個(gè)文件。這種情況和命令被kill相同;則通常情況下在命令失敗時(shí)將目標(biāo)刪除是正確的;當(dāng)’.DELETE_ON_ERROR’是目標(biāo)時(shí)make幫你做這件事。雖然你總是希望make這么做,但這不是過去的習(xí)慣;所以必須顯式要求make這樣做(其它的make自動(dòng)這樣做)。 中斷make如果make執(zhí)行命令時(shí)遇到錯(cuò)誤,可能會(huì)刪除命令更新的目標(biāo)文件: m
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)教案相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1