• <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>

            colorful

            zc qq:1337220912

             

            make

            make是一個命令工具,是一個解釋makefile中指令的命令工具。

            一般來說每一個源文件都會對應一個中間目標文件。

            編譯(compile)生成中間目標文件,連接(link)生成可執行文件,連接主要是連接函數和變量。鏈接器不管源文件,只管中間目標文件。函數如果未被聲明可以生成中間目標文件,但是連接時候會報錯。

            make命令執行時候需要一個makefile文件,以告訴make命令需要怎么樣去編譯和連接程序。我們需要一個makefile來告訴make命令如何編譯個連接。規則是:

            1)如果這個工程沒有被編譯過,那么我們所有的c文件都要被編譯并且被連接

            2)如果這個工程中間的幾個c文件被修改,那么我們只需要編譯被修改的c文件,并且連接目標程序

            3)如果這個工程的頭文件被修改,那么需要編譯引用這個頭文件的c文件。并且連接目標文件。

            makefile的規則:

            targe...: prerequisites...

                    command

                    ...

                    ...

            ;target就是一個目標文件,可以是一個obj文件,也可以是可執行文件,還可以是一個標簽(label)。

            ;prerequisites就是要生成那個target所需要的文件或者是目標。

            ;command也就是make要執行的命令。(任意的shell命令)

            依賴關系實質上說明了目標文件是由哪些文件生成的,換言之,目標文件是由哪些文件更新的。在定義好依賴關系以后,后續的那一行定義了如何生成目標文件的操作系統命令,一定要一個tab鍵開頭。

            在默認的方式下,我們只是輸入了make命令,那么make是如何工作的呢?

            1)make會在當前目錄下尋找名字叫“Makefile”或者“makefile”的文件

            2)如果找到,它就會找文件中的第一個目標文件(target)。就是makefile文件中的第一個target。并且把這個文件作為最終的目標文件。

            3)如果目標文件不存在,或者是目標所依賴后面的.o文件的修改時間要比target文件新,那么就會執行后面所定義的命令來生成目標文件

            4)如果目標文件所依賴的.o文件也不存在,那么make就會在當前文件中間尋找.o文件的依賴型。生成.0文件

            5)當然,c文件和h文件都是存在的啦。于是make會生成.o文件,然后再用.o文件生成make的終極任務,也就是最終的目標文件。

            make的依賴型:make會一層一層的尋找文件的依賴關系,直到最終編譯出第一個目標文件。在找尋的過程中如果出現錯誤,比如最后被依賴的文件沒 有找到,那么make會直接推出,并且報錯。對于所定義的命令的錯誤,或者是編譯不成功,make根本不理睬。make只管文件的依賴型。

            聲明一個變量,叫objects,OBJECTS,objs,OBJS,obj,OBJ.在makefile中以“$(objects)”的方式來使用這個變量。

            每一個makefile中都應該寫一個清空目標文件(.o和執行文件)的規則。這不僅便于重新編譯,而且有利于保持文件的清潔。clean從來就是放在文件的最后。

            makefile里面有什么?主要包括五個東西:顯式規則,隱晦規則,變量定義,文件指示和注釋。

            1)顯式規則:要生成的文件,文件的依賴文件和生成的命令。

            2)隱晦規則:make有自動推導的功能,能夠推導出依賴關系。

            3)變量的定義:makefile中要定義一系列的變量,變量一般都是字符串。

            4)文件指示:包括三部分:

                  A)一個makefile引用另一個makefile,類似于c中的“include”。使用include關鍵字將別的makefile包含進來。語法:include<filename>

                  B)根據某些情況指定makefile中的有效部分,類似于c中的“#if”

                  C)多行命令

            5)注釋:行注釋“#”,用“\#”進行轉義。

            make一次尋找“GNUmakefile”,“makefile”,“Makefile”。

            偽目標并不是一個文件,只是一個標簽,由于“偽目標”不是文件,所以make無法生成他的依賴關系和決定它是否要執行。為了避免偽目標和文件重名,使用特殊的標記“.PHONY”來顯式的表示是“偽目標”。


            ///////////////////////////////////////////////////////////////

            posted on 2012-04-26 23:53 多彩人生 閱讀(307) 評論(0)  編輯 收藏 引用

            導航

            統計

            常用鏈接

            留言簿(3)

            隨筆分類

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久精品99久久香蕉国产色戒| 久久精品一区二区三区不卡| 日韩一区二区三区视频久久| 久久久久黑人强伦姧人妻| 香蕉99久久国产综合精品宅男自| 久久无码中文字幕东京热| 久久综合香蕉国产蜜臀AV| 91精品国产综合久久香蕉| 久久午夜福利无码1000合集| 97久久精品午夜一区二区| 理论片午午伦夜理片久久| 亚洲国产另类久久久精品小说| 久久99国产精品久久99| 亚洲午夜无码AV毛片久久| 久久久久99精品成人片直播| 久久久这里有精品中文字幕| 东方aⅴ免费观看久久av| 国产福利电影一区二区三区,免费久久久久久久精 | 久久99久久无码毛片一区二区| 久久久久人妻一区二区三区| 青青草国产成人久久91网| 亚洲精品乱码久久久久久久久久久久 | 欧美精品乱码99久久蜜桃| 久久国产精品久久| 久久精品国产99国产精品导航| 久久97久久97精品免视看秋霞| www性久久久com| 久久久久AV综合网成人| 狠狠色噜噜色狠狠狠综合久久| 久久性精品| 国产精品免费看久久久香蕉| 精品国产乱码久久久久久1区2区 | 久久精品国产亚洲精品| 国内精品久久久久影院优| 久久亚洲精品无码VA大香大香| 久久夜色精品国产www| 丁香久久婷婷国产午夜视频| 久久96国产精品久久久| 久久久WWW成人| 亚洲国产成人久久综合碰碰动漫3d| 国内精品九九久久久精品|