<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Linux下C編程基礎(chǔ)之:make工程管理器

          Linux下C編程基礎(chǔ)之:make工程管理器

          作者: 時(shí)間:2013-09-13 來(lái)源:網(wǎng)絡(luò) 收藏


          本文引用地址:http://www.ex-cimer.com/article/257149.htm

          3.5.3makefile規(guī)則

          makefile的規(guī)則是make進(jìn)行處理的依據(jù),它包括了目標(biāo)體、依賴(lài)文件及其之間的命令語(yǔ)句。在上面的例子中,都顯式地指出了makefile中的規(guī)則關(guān)系,如“$(CC)$(CFLAGS)-c$-o$@”,但為了簡(jiǎn)化makefile的編寫(xiě),make還定義了隱式規(guī)則和模式規(guī)則,下面就分別對(duì)其進(jìn)行講解。


          1.隱式規(guī)則

          隱含規(guī)則能夠告訴make怎樣使用傳統(tǒng)的規(guī)則完成任務(wù),這樣,當(dāng)用戶(hù)使用它們時(shí)就不必詳細(xì)指定編譯的具體細(xì)節(jié),而只需把目標(biāo)文件列出即可。make會(huì)自動(dòng)搜索隱式規(guī)則目錄來(lái)確定如何生成目標(biāo)文件。如上例就可以寫(xiě)成:


          OBJS=kang.oyul.o

          CC=gcc

          CFLAGS=-Wall-O-g

          david:$(OBJS)

          $(CC)$^-o$@

          為什么可以省略后兩句呢?因?yàn)閙ake的隱式規(guī)則指出:所有“.o”文件都可自動(dòng)由“.c”文件使用命令“$(CC)$(CPPFLAGS)$(CFLAGS)-cfile.c–ofile.o”來(lái)生成。這樣“kang.o”和“yul.o”就會(huì)分別通過(guò)調(diào)用“$(CC)$(CFLAGS)-ckang.c-okang.o”和“$(CC)$(CFLAGS)-cyul.c-oyul.o”來(lái)生成。


          注意

          在隱式規(guī)則只能查找到相同文件名的不同后綴名文件,如“kang.o”文件必須由“kang.c”文件生成。


          表3.17給出了常見(jiàn)的隱式規(guī)則目錄。

          表3.17 makefile中常見(jiàn)隱式規(guī)則目錄

          對(duì)應(yīng)語(yǔ)言后綴名

          隱式規(guī)則

          C編譯:.c變?yōu)?o

          $(CC)–c$(CPPFLAGS)$(CFLAGS)

          C++編譯:.cc或.C變?yōu)?o

          $(CXX)-c$(CPPFLAGS)$(CXXFLAGS)

          Pascal編譯:.p變?yōu)?o

          $(PC)-c$(PFLAGS)

          Fortran編譯:.r變?yōu)?o

          $(FC)-c$(FFLAGS)

          2.模式規(guī)則

          模式規(guī)則是用來(lái)定義相同處理規(guī)則的多個(gè)文件的。它不同于隱式規(guī)則,隱式規(guī)則僅僅能夠用make默認(rèn)的變量來(lái)進(jìn)行操作,而模式規(guī)則還能引入用戶(hù)自定義變量,為多個(gè)文件建立相同的規(guī)則,從而簡(jiǎn)化makefile的編寫(xiě)。


          模式規(guī)則的格式類(lèi)似于普通規(guī)則,這個(gè)規(guī)則中的相關(guān)文件前必須用“%”標(biāo)明。使用模式規(guī)則修改后的makefile的編寫(xiě)如下:


          OBJS=kang.oyul.o

          CC=gcc

          CFLAGS=-Wall-O-g

          david:$(OBJS)

          $(CC)$^-o$@

          %.o:%.c

          $(CC)$(CFLAGS)-c$-o$@


          3.5.4make管理器的使用

          使用make管理器非常簡(jiǎn)單,只需在make命令的后面鍵入目標(biāo)名即可建立指定的目標(biāo),如果直接運(yùn)行make,則建立makefile中的第一個(gè)目標(biāo)。


          此外make還有豐富的命令行選項(xiàng),可以完成各種不同的功能。表3.18列出了常用的make命令行選項(xiàng)。

          表3.18 make的命令行選項(xiàng)

          命令格式

          含義

          -Cdir

          讀入指定目錄下的makefile

          -ffile

          讀入當(dāng)前目錄下的file文件作為makefile

          -I

          忽略所有的命令執(zhí)行錯(cuò)誤

          -Idir

          指定被包含的makefile所在目錄

          -n

          只打印要執(zhí)行的命令,但不執(zhí)行這些命令

          -p

          顯示make變量數(shù)據(jù)庫(kù)和隱含規(guī)則

          -s

          在執(zhí)行命令時(shí)不顯示命令

          -w

          如果make在執(zhí)行過(guò)程中改變目錄,則打印當(dāng)前目錄名


          linux操作系統(tǒng)文章專(zhuān)題:linux操作系統(tǒng)詳解(linux不再難懂)

          linux相關(guān)文章:linux教程



          上一頁(yè) 1 2 3 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();