• <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>
            隨筆 - 10, 文章 - 1, 評論 - 9, 引用 - 0
            數據加載中……

            Makefile 解析

            一個工程中的源文件可能很多的情況下,按其類型、功能、模塊分別放到若干個目錄中,makefile定義了一系列的規則,用以指定那些需要先編譯,那些需要后編譯,那些需要重新編譯,和一些更復雜的操作。,makefile的好處就是自動化編譯,一點寫好,只需要make命令,整個工程就會自動編譯,提高了項目的管理能力和軟件的開發效率。

            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可執行文件。如果想要刪除可執行文件或者是中間目標文件直接make clean就行了。

            依賴關系:

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

            定義好依賴關系后,后面的一行就定義了如何生成目標文件的操作系統命令,一定要以tab鍵開頭。記住make并不管命令式怎么工作的,它只關心定義的命令。Make會比較目標文件和依賴文件的修改日期,如果依賴文件的日期要比目標文件的日期更新,或者是目標文件不存在的話,make就會執行后續定義的命令。

             

            Make是如何工作的

            1.       查找Makefilemakefile文件

            2.       查找第一個目標文件,并將這個文件作為最終的目標文件

            3.       查找目標文件是否存在,或者是當前目標文件依賴的.o 文件的文件修改時間要比當前目標文件新,則執行后面定義的命令來生成edit這個文件

            4.       如果edit依賴的.o文件也存在,那么make會在當前文件中查找目標文件為.o文件的依賴性,如果找到則根據哪一個規則生成.o文件。

            5.       根據c文件和.h文件,make生成.o文件,然后生成最終目標文件。

             

            Make會一層已成的查找文件的依賴關系,知道最終編譯出第一個目標文件。在查找過程中,如果出現錯誤,比如被依賴的文件找不到,那么make就會直接退出,并報錯,但是對于所定義的命令的錯誤,或者是編譯不成功,make會置之不理。但是當查找到一個文件的依賴關系的時候,并且執行依賴關系之后命令,冒號后面的依賴文件如果還是不存在,那么make就會退出。

            由上可知,想clean這種沒有被第一個目標文件直接或間接關聯,那么他后面定義的命令將不會自動執行。如果想顯式執行要求make執行clean之后的命令,“輸入make clean”就行了,用以清除所有的目標文件,便于重新編譯。

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

            2.       gnu make可以實現自動推倒

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

            亚洲一级Av无码毛片久久精品| 亚洲国产精品无码久久九九| 久久久久久久综合日本亚洲| 四虎国产精品免费久久5151| 亚洲人成网站999久久久综合| 久久国产色AV免费观看| 色综合久久最新中文字幕| 无码国内精品久久综合88| 国产韩国精品一区二区三区久久| 久久天天躁狠狠躁夜夜av浪潮| 亚洲国产精品无码久久久蜜芽| 国产综合免费精品久久久| 伊人久久精品无码二区麻豆| 精品无码人妻久久久久久| 丰满少妇人妻久久久久久| 久久久久久伊人高潮影院| 久久影视综合亚洲| 国产精品亚洲美女久久久| 国内精品久久久久久99| 久久ZYZ资源站无码中文动漫| 日韩欧美亚洲综合久久影院Ds| 久久99热国产这有精品| 老色鬼久久亚洲AV综合| 性欧美大战久久久久久久久| 亚洲性久久久影院| 亚洲精品久久久www| 亚洲欧洲久久久精品| 中文字幕久久亚洲一区| 香蕉99久久国产综合精品宅男自 | 7777精品久久久大香线蕉| 思思久久99热只有频精品66| 久久99久久成人免费播放| 国产精品99久久久久久宅男| 香蕉久久夜色精品国产小说| 国产一区二区精品久久| 久久久免费精品re6| 久久久久99精品成人片直播| 精品无码久久久久久午夜| 精品综合久久久久久888蜜芽| 99精品国产在热久久| 国产一级持黄大片99久久|