- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Makefile的隐含规则
Makefile隱含規則 ———— 在我們使用Makefile時,有一些我們會經常使用,而且使用頻率非常高的東西,比如,我們編譯C/C++的來源程式為中間目的檔案(Unix下是[.o]文件,Windows下是[.obj]文件)。本章講述的就是一些在Makefile中的“隱含的”,早先約定了的,不需要我們再寫出來的規則。 “隱含規則”也就是一種慣例,make會按照這種“慣例”心照不喧地來運行,那怕我們的Makefile中沒有書寫這樣的規則。例如,把[.c]檔編譯成[.o]檔這一規則,你根本就不用寫出來,make會自動推導出這種規則,並生成我們需要的[.o]文件。 “隱含規則”會使用一些我們系統變數,我們可以改變這些系統變數的值來定制隱含規則的運行時的參數。如系統變數“CFLAGS”可以控制編譯時的編譯器參數。 我們還可以通過“模式規則”的方式寫下自己的隱含規則。用“尾碼規則”來定義隱含規則會有許多的限制。使用“模式規則”會更回得智慧和清楚,但“尾碼規則”可以用來保證我們Makefile的相容性。 我們瞭解了“隱含規則”,可以讓其為我們更好的服務,也會讓我們知道一些“約定俗成”了的東西,而不至於使得我們在運行Makefile時出現一些我們覺得莫名其妙的東西。當然,任何事物都是矛盾的,水能載舟,亦可覆舟,所以,有時候“隱含規則”也會給我們造成不小的麻煩。只有瞭解了它,我們才能更好地使用它。 一、使用隱含規則 如果要使用隱含規則生成你需要的目標,你所需要做的就是不要寫出這個目標的規則。那麼,make會試圖去自動推導產生這個目標的規則和命令,如果make可以自動推導生成這個目標的規則和命令,那麼這個行為就是隱含規則的自動推導。當然,隱含規則是make事先約定好的一些東西。例如,我們有下面的一個Makefile: ????foo?:?foo.o?bar.o ????????????cc?–o?foo?foo.o?bar.o?$(CFLAGS)?$(LDFLAGS) 我們可以注意到,這個Makefile中並沒有寫下如何生成foo.o和bar.o這兩目標的規則和命令。因為make的“隱含規則”功能會自動為我們自動去推導這兩個目標的依賴目標和生成命令。 make會在自己的“隱含規則”庫中尋找可以用的規則,如果找到,那麼就會使用。如果找不到,那麼就會報錯。在上面的那個例子中,make調用的隱含規則是,把[.o]的目標的依賴檔置成[.c],並使用C的編譯命令“cc?–c?$(CFLAGS)?[.c]”來生成[.o]的目標。也就是說,我們完全沒有必要寫下下面的兩條規則: ????foo.o?:?foo.c ????????????cc?–c?foo.c?$(CFLAGS) ????bar.o?:?bar.c ????????cc?–c?bar.c?$(CFLAGS) 因為,這已經是“約定”好了的事了,make和我們約定好了用C編譯器“cc”生成[.o]檔的規則,這就是隱含規則。 當然,如果我們為[.o]檔書寫了自己的規則,那麼make就不會自動推導並調用隱含規則,它會按照我們寫好的規則忠實地執行。 還有,在make的“隱含規則庫”中,每一條隱含規則都在庫中有其順序,越靠前的則是越被經常使用的,所以,這會導致我們有些時候即使我們顯示地指定了目標依賴,make也不會管。如下面這條規則(沒有命令): ????foo.o?:?foo.p 依賴檔“foo.p”(Pascal程式的原始檔案)有可能變得沒有意義。如果目錄下存在了“foo.c”檔,那麼我們的隱含規則一樣會生效,並會通過“foo.c”調用C的編譯器生成foo.o文件。因為,在隱含規則中,Pascal的規則出現在C的規則之後,所以,make找到可以生成foo.o的C的規則就不再尋找下一條規則了。如果你確實不希望任何隱含規則推導,那麼,你就不要只寫出“依賴規則”,而不寫命令。 二、隱含規則一覽 這裡我們將講述所有預先設置(也就是make內建)的隱含規則,如果我們不明確地寫下規則,那麼,make就會在這些規則中尋找所需要規則和命令。當然,我們也可以使用make的參數“-r”或“--no-builtin-rules”選項來取消所有的預設置的隱含規則。 當然,即使是我們指定了“-r”參數,某些隱含規則還是會生效,因為有許多的隱含規則都是使用了“尾碼規則”來定義的,所以,只要隱含規則中有“尾碼清單”(也就一系統定義在目標.SUFFIXES的依賴目標),那麼隱含規則就會生效。默認的尾碼列表是:.out,?.a,?.ln,?.o,?.c,?.cc,?.C,?.p,?.f,?.F,?.r,?.y,?.l,?.s,?.S,?.mod,
您可能关注的文档
- K线蜡烛图 ppt.ppt
- k线解析.ppt
- Kraljic Purchasing Model.ppt
- L W -H Equilibrium Measurements and Unified Predictions of.ppt
- LABORATORY 4 PHYLUM PLATYHELMINTHES.doc
- LabProcedure_174506540.ppt
- Landing_a_Job_Related_to_the_Major_or_Not.doc
- Laduree.docx
- Laparoscopic Appendectomy.ppt
- LAST MILE.ppt
- M6U3Project.ppt
- Mass spectral.ppt
- Mathematical Statistics and Data Analysis.ppt
- MATLAB R2013a Functions.doc
- maya风.doc
- MCD2030-week4-2009.ppt
- Measuring GDP.ppt
- Measuring Variance between Smartphone Energy Consumption and Battery Life.docx
- Mechanics-based scaling laws for the durability of TBCs.docx
- Medical Abbreviations used by Hospital Professionals.doc
文档评论(0)