ivaneeo's blog

          自由的力量,自由的生活。

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks

          #

          演示目標(biāo)體,依賴體和命令的簡單makefile文件
          howdy: howdy.o helper.o helper.h
              gcc howdy.o helper.o -o howdy
          helper.o: helper.c helper.h
              gcc -c helper.c
          howdy.o: howdy.c
              gcc -c howdy.c
          hello: hello.c
              gcc hello.c -o hello
          all: howdy hello
          clean:
              rm howdy hello *.o

          這個(gè)makefile文件包含6條規(guī)則.第一個(gè)目標(biāo)體howdy稱為默認(rèn)(default)目標(biāo)體--這是make要?jiǎng)?chuàng)建的文件.howdy有3個(gè)依賴體,分別為howdy.o,helper.o和helper.h;要編譯生成howdy,必須要有這3個(gè)文件.
          第二行調(diào)用編譯器的命令供make執(zhí)行來創(chuàng)建howdy.把頭文件helper.h作為一個(gè)依賴體列入是為了避免編譯器調(diào)用未聲明的函數(shù)產(chǎn)生出錯(cuò)信息.
          接下來的兩條規(guī)則告訴make怎樣生成單個(gè)目標(biāo)文件,helper.o和howdy.o.這些規(guī)則使用了gcc的-c選項(xiàng),只創(chuàng)建目標(biāo)文件但跳過鏈接.如果只想生成兩個(gè)目標(biāo)文件而不生成howdy本身,可以使用下面兩條命令:
            $make helper.o
            $make howdy.o
          更簡潔一點(diǎn),只需使用
            $make helper.o howdy.o
          posted @ 2005-08-04 21:52 ivaneeo 閱讀(245) | 評(píng)論 (0)編輯 收藏

          makefile是一個(gè)文本形式的數(shù)據(jù)庫文件,其中包含一些規(guī)則告訴make編譯哪些文件,怎樣編譯以及在什么條件下去編譯.每條規(guī)則包含以下內(nèi)容:
          .一個(gè)"目標(biāo)體"(target),即make最終需要?jiǎng)?chuàng)建的東西.
          .包含一個(gè)或多個(gè)"依賴體"(dependency)的列表,依賴體通常是編譯目標(biāo)體需要的其他文件.
          .為了從指定的依賴體創(chuàng)建出目標(biāo)體所需執(zhí)行的"命令"(command)的列表.

          雖然目標(biāo)體通常是程序,但它們可以是諸如文本文件,手冊(cè)頁面等任何東西.目標(biāo)體甚至能測試和設(shè)置環(huán)境變量.類似地,也可以定義依賴體以確保編譯開始前存在 某個(gè)特殊的環(huán)境變量.最后,makefile中的命令可以是編譯器的命令或shell命令,它們能設(shè)置環(huán)境變量,刪除文件,或者任何命令行所能完成的功 能,如從FTP站點(diǎn)下載文件等.GNU make被調(diào)用后會(huì)順序查找名為GNUmakefile,makefile或Makefile的文件.出于某種原因,可能只是習(xí)慣和長期形成的約定吧,大 多數(shù)Linux程序員使用最后一種形式Makefile.

          Makefile規(guī)則有下列通用形式:
            target : dependency [dependency [...]]
                command
                command
                [...]
          posted @ 2005-08-04 21:51 ivaneeo 閱讀(251) | 評(píng)論 (0)編輯 收藏

          假設(shè)有下面這樣的一個(gè)makefile:
            OBJS = editor.o screen.o keyboard.o
            edit : $(OBJS)
                cc -o editor $(OBJS)
            .PHONY : clean
            clean :
                rm editor $(OBJS)
          此時(shí),make就使用所謂的隱式規(guī)則,實(shí)際上,對(duì)每一個(gè)名為somefile.o的目標(biāo)(object)文件,make首先找到與之相應(yīng)的源代碼somefile.c,并且用gcc -c somefile.c -o somefile.o 編譯生產(chǎn)這個(gè)目標(biāo)文件.
            實(shí)際的機(jī)制比這個(gè)所描述的要全面.目標(biāo)文件(.o)可以從c,Pascal和Fortran等源代碼中生產(chǎn),所以make也應(yīng)去查找符合實(shí)際情況的相關(guān)文件.
          posted @ 2005-08-04 21:51 ivaneeo 閱讀(284) | 評(píng)論 (0)編輯 收藏

          通過定義用戶自己的隱式規(guī)則,模式規(guī)則提供了開展make的隱式規(guī)則的一種方法.模式規(guī)則類似于普通規(guī)則,但是它們的目標(biāo)必定含有符號(hào)"%".這個(gè)符號(hào)可以與任何非空字符串匹配:為與目標(biāo)中的"%"匹配,這個(gè)規(guī)則的相關(guān)文件部分也必須使用"%".例如,下面的規(guī)則:
            %.o : %.c
            告訴make所有形為somename.o的目標(biāo)(object)文件都應(yīng)從源文件somename.c編譯而來.
            與隱式規(guī)則一樣,make預(yù)定義了一些模式規(guī)則:
            %.o : %.c
                $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
          posted @ 2005-08-04 21:50 ivaneeo 閱讀(209) | 評(píng)論 (0)編輯 收藏

          ??????????????????????? 常用的make命令行選項(xiàng)
          選項(xiàng)?????????????? 說明
          -f file????????????指定makefile的文件名
          -n???????????????? 打印將需要執(zhí)行的命令,但實(shí)際上并不執(zhí)行這些命令
          -Idirname??????????指定被包含的makefile所在的目錄
          -s???????????????? 在執(zhí)行時(shí)不打印命令名
          -w???????????????? 如果make在執(zhí)行時(shí)改變目錄,打印當(dāng)前目錄名
          -Wfile???????????? 如果文件已修改,則使用-n來顯示make將要執(zhí)行的命令
          -r???????????????? 禁止使用所有make的內(nèi)置規(guī)則
          -d???????????????? 打印調(diào)試信息
          -i???????????????? 忽略makefile規(guī)則中的命令執(zhí)行后返回的非零錯(cuò)誤碼,此時(shí),即使某個(gè)命令返回非零的退出狀態(tài)值,make仍將繼續(xù)執(zhí)行.
          -k???????????????? 如果某個(gè)目標(biāo)編譯失敗,繼續(xù)編譯其他目標(biāo).通常,make在一個(gè)目標(biāo)編譯失敗后終止
          -jN????????????????每次運(yùn)行N個(gè)命令,這里N是非零整數(shù)



          posted @ 2005-08-04 21:49 ivaneeo 閱讀(293) | 評(píng)論 (0)編輯 收藏

          如果在使用make時(shí)遇到問題,-d選項(xiàng)能夠使make在執(zhí)行命令時(shí)打印打量的額外調(diào)試信息.其中包括如下信息:
          .在重新編譯時(shí)make需要檢查的文件
          .被比較的文件以及比較的結(jié)果
          .需要被重新生產(chǎn)的文件
          .make想要使用的隱式規(guī)則
          .make實(shí)際使用的隱式規(guī)則以及所執(zhí)行的命令
          posted @ 2005-08-04 21:49 ivaneeo 閱讀(383) | 評(píng)論 (0)編輯 收藏

          .No rule to make target 'target'.Stop makefile中沒有包含創(chuàng)建指定的target所需要的規(guī)則,而且也沒有合適的默認(rèn)規(guī)則可用.
          .'target' is up to date 指定 target 的相關(guān)文件沒有變化.
          .Target 'target' not remade because of errors 在編譯target時(shí)出錯(cuò),這一消息僅在使用make的-k選項(xiàng)時(shí)才會(huì)出現(xiàn).
          .command: Command not found make 找不到命令.通常是因?yàn)槊畋黄磳戝e(cuò)誤或者不在路徑$PATH下.
          .Illegal option - option 在調(diào)用make時(shí)包含了不能被make識(shí)別的選項(xiàng).
          posted @ 2005-08-04 21:48 ivaneeo 閱讀(877) | 評(píng)論 (1)編輯 收藏

          出了clean的目標(biāo),外編寫makefile時(shí)還有一些常用的目標(biāo).
          名為install的目標(biāo)把最終的二進(jìn)制,所支持的庫文件或shell腳本,以及相關(guān)的文檔移動(dòng)到文件系統(tǒng)中與之相應(yīng)的最終位置,并適當(dāng)設(shè)置文件的權(quán)限和屬主.
            uninstall目標(biāo)則刪除由install目標(biāo)所安裝的那些文件.
          dist目標(biāo)可以用來生產(chǎn)準(zhǔn)備發(fā)布的軟件包.最低限度,dist目標(biāo)將刪除編譯工作目標(biāo)中舊的二進(jìn)制文件和目標(biāo)文件并創(chuàng)建一個(gè)歸檔文件(如普通的壓縮包),以便上載到萬維網(wǎng)頁或FTP站點(diǎn).
          posted @ 2005-08-04 21:47 ivaneeo 閱讀(232) | 評(píng)論 (0)編輯 收藏

           http://www.cs.indiana.edu/classes/a348-dger/fall2002/notes/ 
          值得推薦。
          posted @ 2005-08-04 21:46 ivaneeo 閱讀(167) | 評(píng)論 (0)編輯 收藏

          indent能夠按照許多預(yù)先定義好的或者自定義的標(biāo)準(zhǔn)調(diào)整源代碼以及代碼縮進(jìn)的格式以達(dá)到所需的風(fēng)格.tags程序(它在emacs上的對(duì)應(yīng)程序, etags)生成的文件能夠增強(qiáng)編輯器瀏覽和分析源代碼的能力.lclint程序是在編譯源代碼之前做個(gè)快速語法檢查.它能檢查代碼,找出大量問題,包括 未聲明的變量和函數(shù),可能的內(nèi)存破壞(memory corruption),當(dāng)然它能檢查的問題不僅僅就這幾種.
          網(wǎng)上這類工具中最好的資源是"動(dòng)態(tài)存儲(chǔ)分配和內(nèi)存管理信息庫"(Dynamic Store Allocation and Memory Management Information Repository),它的Web地址為 http://www.cs.colorado.edu/~zorn/DSA.html/.
          posted @ 2005-08-04 21:46 ivaneeo 閱讀(156) | 評(píng)論 (0)編輯 收藏

          僅列出標(biāo)題
          共67頁: First 上一頁 57 58 59 60 61 62 63 64 65 下一頁 Last 
          主站蜘蛛池模板: 石柱| 邮箱| 平远县| 赤壁市| 饶河县| 都昌县| 和田市| 静乐县| 长葛市| 合水县| 凉城县| 尉犁县| 区。| 军事| 中西区| 通化市| 奉贤区| 南汇区| 玉龙| 赤水市| 孟州市| 金昌市| 石门县| 邳州市| 天水市| 安化县| 崇义县| 民和| 桓台县| 河北省| 保靖县| 连山| 兖州市| 简阳市| 玛曲县| 佳木斯市| 获嘉县| 博乐市| 家居| 内丘县| 泰来县|