• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            吾嘗終日而思矣 不如須臾之所學(xué)也

            御物而行 御風(fēng)而飛
            隨筆 - 10, 文章 - 1, 評(píng)論 - 9, 引用 - 0
            數(shù)據(jù)加載中……

            Makefile 解析

            一個(gè)工程中的源文件可能很多的情況下,按其類(lèi)型、功能、模塊分別放到若干個(gè)目錄中,makefile定義了一系列的規(guī)則,用以指定那些需要先編譯,那些需要后編譯,那些需要重新編譯,和一些更復(fù)雜的操作。,makefile的好處就是自動(dòng)化編譯,一點(diǎn)寫(xiě)好,只需要make命令,整個(gè)工程就會(huì)自動(dòng)編譯,提高了項(xiàng)目的管理能力和軟件的開(kāi)發(fā)效率。

            Makefile 文件解讀

             

            edit : main.o kbd.o command.o display.o \ 

            insert.o search.o files.o utils.o 

            cc -o edit main.o kbd.o command.o display.o \ 

            insert.o search.o files.o utils.o 

             

            main.o : main.c defs.h 

            cc -c main.c 

            kbd.o : kbd.c defs.h command.h 

            cc -c kbd.c 

            command.o : command.c defs.h command.h 

            cc -c command.c 

            display.o : display.c defs.h buffer.h 

            cc -c display.c 

            insert.o : insert.c defs.h buffer.h 

            cc -c insert.c 

            search.o : search.c defs.h buffer.h 

            cc -c search.c 

            files.o : files.c defs.h buffer.h command.h 

            cc -c files.c 

            utils.o : utils.c defs.h 

            cc -c utils.c 

            clean : 

            rm edit main.o kbd.o command.o display.o \ 

            insert.o search.o files.o utils.o 

             

            反斜杠(\)是換行的意思。上述makefile文件可以命名為makefileMakefile,如果在目錄中輸入make,就可以生成edit可執(zhí)行文件。如果想要?jiǎng)h除可執(zhí)行文件或者是中間目標(biāo)文件直接make clean就行了。

            依賴關(guān)系:

            有上述例子可以看出,目標(biāo)文件包含兩種:執(zhí)行文件(edit)和中間目標(biāo)文件(*.obj),依賴文件(prerequisites)就是冒號(hào)后面的那些.c.h文件。每一個(gè).o 文件都有一組依賴文件,這些.o的文件又是執(zhí)行文件edit的依賴文件。其實(shí)依賴關(guān)系就是說(shuō)明了目標(biāo)文件是有那些文件申城的,換言之就是目標(biāo)文件是哪些文件更新的。

            定義好依賴關(guān)系后,后面的一行就定義了如何生成目標(biāo)文件的操作系統(tǒng)命令,一定要以tab鍵開(kāi)頭。記住make并不管命令式怎么工作的,它只關(guān)心定義的命令。Make會(huì)比較目標(biāo)文件和依賴文件的修改日期,如果依賴文件的日期要比目標(biāo)文件的日期更新,或者是目標(biāo)文件不存在的話,make就會(huì)執(zhí)行后續(xù)定義的命令。

             

            Make是如何工作的

            1.       查找Makefilemakefile文件

            2.       查找第一個(gè)目標(biāo)文件,并將這個(gè)文件作為最終的目標(biāo)文件

            3.       查找目標(biāo)文件是否存在,或者是當(dāng)前目標(biāo)文件依賴的.o 文件的文件修改時(shí)間要比當(dāng)前目標(biāo)文件新,則執(zhí)行后面定義的命令來(lái)生成edit這個(gè)文件

            4.       如果edit依賴的.o文件也存在,那么make會(huì)在當(dāng)前文件中查找目標(biāo)文件為.o文件的依賴性,如果找到則根據(jù)哪一個(gè)規(guī)則生成.o文件。

            5.       根據(jù)c文件和.h文件,make生成.o文件,然后生成最終目標(biāo)文件。

             

            Make會(huì)一層已成的查找文件的依賴關(guān)系,知道最終編譯出第一個(gè)目標(biāo)文件。在查找過(guò)程中,如果出現(xiàn)錯(cuò)誤,比如被依賴的文件找不到,那么make就會(huì)直接退出,并報(bào)錯(cuò),但是對(duì)于所定義的命令的錯(cuò)誤,或者是編譯不成功,make會(huì)置之不理。但是當(dāng)查找到一個(gè)文件的依賴關(guān)系的時(shí)候,并且執(zhí)行依賴關(guān)系之后命令,冒號(hào)后面的依賴文件如果還是不存在,那么make就會(huì)退出。

            由上可知,想clean這種沒(méi)有被第一個(gè)目標(biāo)文件直接或間接關(guān)聯(lián),那么他后面定義的命令將不會(huì)自動(dòng)執(zhí)行。如果想顯式執(zhí)行要求make執(zhí)行clean之后的命令,“輸入make clean”就行了,用以清除所有的目標(biāo)文件,便于重新編譯。

            1.       另外makefile中也可以添加一些宏定義(變量)

            2.       gnu make可以實(shí)現(xiàn)自動(dòng)推倒

            posted on 2011-11-17 20:04 Roger 閱讀(7948) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            青青久久精品国产免费看| 久久这里只有精品18| 韩国免费A级毛片久久| 国内精品久久久久| 久久无码AV中文出轨人妻 | 丁香色欲久久久久久综合网| 久久无码高潮喷水| 94久久国产乱子伦精品免费| 亚洲伊人久久成综合人影院| 欧美精品一本久久男人的天堂| 久久精品国产亚洲AV不卡| 精品免费久久久久国产一区| 久久久久久无码Av成人影院| 伊人久久精品无码av一区| 国内精品久久久久| 精品综合久久久久久97| 精品水蜜桃久久久久久久| 伊人久久大香线蕉AV色婷婷色| 狠狠色丁香婷婷综合久久来来去| 日韩久久久久久中文人妻| 国产99久久久国产精品小说| 91久久精品视频| 色成年激情久久综合| 久久久久久国产精品免费无码| 中文国产成人精品久久亚洲精品AⅤ无码精品| 精品无码久久久久久午夜| 精品熟女少妇AV免费久久| 欧美色综合久久久久久| 成人资源影音先锋久久资源网| 久久国产精品99精品国产987| 久久久久亚洲AV无码专区首JN| 一本一本久久a久久精品综合麻豆| 91麻豆精品国产91久久久久久| 狠狠久久亚洲欧美专区| 久久99中文字幕久久| 国产精品免费看久久久| 国内精品人妻无码久久久影院| 久久久久久久人妻无码中文字幕爆| 综合人妻久久一区二区精品| 波多野结衣AV无码久久一区| 久久无码AV一区二区三区|