• <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>
            三、make是如何工作的

            在默認的方式下,也就是我們只輸入make命令。那么,

                1、make會在當前目錄下找名字叫“Makefile”或“makefile”的文件。
                2、如果找到,它會找文件中的第一個目標文件(target),在上面的例子中,他會找到“edit”這個文件,并把這個文件作為最終的目標文件。
                3、如果edit文件不存在,或是edit所依賴的后面的 .o 文件的文件修改時間要比edit這個文件新,那么,他就會執行后面所定義的命令來生成edit這個文件。
                4、如果edit所依賴的.o文件也存在,那么make會在當前文件中找目標為.o文件的依賴性,如果找到則再根據那一個規則生成.o文件。(這有點像一個堆棧的過程)
                5、當然,你的C文件和H文件是存在的啦,于是make會生成 .o 文件,然后再用 .o 文件生命make的終極任務,也就是執行文件edit了。

            這就是整個make的依賴性,make會一層又一層地去找文件的依賴關系,直到最終編譯出第一個目標文件。在找尋的過程中,如果出現錯誤,比如最后被依賴的文件找不到,那么make就會直接退出,并報錯,而對于所定義的命令的錯誤,或是編譯不成功,make根本不理。make只管文件的依賴性,即,如果在我找了依賴關系之后,冒號后面的文件還是不在,那么對不起,我就不工作啦。

            通過上述分析,我們知道,像clean這種,沒有被第一個目標文件直接或間接關聯,那么它后面所定義的命令將不會被自動執行,不過,我們可以顯示要make執行。即命令——“make clean”,以此來清除所有的目標文件,以便重編譯。

            于是在我們編程中,如果這個工程已被編譯過了,當我們修改了其中一個源文件,比如file.c,那么根據我們的依賴性,我們的目標file.o會被重編譯(也就是在這個依性關系后面所定義的命令),于是file.o的文件也是最新的啦,于是file.o的文件修改時間要比edit要新,所以edit也會被重新鏈接了(詳見edit目標文件后定義的命令)。

            而如果我們改變了“command.h”,那么,kdb.o、command.o和files.o都會被重編譯,并且,edit會被重鏈接。

            Posted on 2007-04-17 10:49 艾凡赫 閱讀(839) 評論(0)  編輯 收藏 引用 所屬分類: C++
            一级女性全黄久久生活片免费| 久久青青草原精品国产不卡| 亚洲人成网亚洲欧洲无码久久| 伊人久久大香线蕉综合网站| 久久久久久久精品妇女99| 久久超碰97人人做人人爱| 久久国产精品99久久久久久老狼| 国产L精品国产亚洲区久久| 国产精品亚洲综合久久| 国产亚洲精久久久久久无码 | 久久婷婷色综合一区二区| 久久99久久99精品免视看动漫| 成人国内精品久久久久一区| 久久青青草原亚洲av无码| 精品久久久久久亚洲精品| 久久久久久久久久久免费精品 | 中文精品久久久久人妻不卡| 2021少妇久久久久久久久久| 久久久久亚洲av成人网人人软件 | 久久综合久久综合亚洲| 99久久免费国产精品| 色婷婷久久综合中文久久蜜桃av| 久久国产视屏| 亚洲国产精久久久久久久| 久久久噜噜噜久久中文福利| 亚洲国产成人精品91久久久 | 无码AV中文字幕久久专区| 久久国产成人亚洲精品影院| 久久精品国产亚洲欧美| 国产Av激情久久无码天堂| 久久综合色老色| 最新久久免费视频| 久久精品国产国产精品四凭| 国产精品久久久久久福利漫画 | 久久精品国产只有精品66| 久久成人影院精品777| 久久99国产精品二区不卡| 久久精品aⅴ无码中文字字幕不卡 久久精品aⅴ无码中文字字幕重口 | 一本久道久久综合狠狠躁AV| 亚洲欧洲精品成人久久曰影片| 综合久久给合久久狠狠狠97色|