makefile定義作用及其執行過程

2021-07-11 09:15:27 字數 2067 閱讀 7318

1、定義:

makefile是乙個指令碼檔案,解決了批處理(自動編譯)的問題,即用一條指令替代多條指令執行的效果,幫助make來編譯工程**。

在 linux(unix )環境下使用gnu 的make工具能夠比較容易的構建乙個屬於你自己的工程,整個工程的編譯只需要乙個命令就可以完成編譯、連線以至於最後的執行。不過這需要我們投入一些時間去完成乙個或者多個稱之為makefile 檔案的編寫。

所要完成的makefile 檔案描述了整個工程的編譯、連線等規則。其中包括:工程中的哪些原始檔需要編譯以及如何編譯、需要建立那些庫檔案以及如何建立這些庫檔案、如何最後產生我們想要的可執行檔案。儘管看起來可能是很複雜的事情,但是為工程編寫makefile 的好處是能夠使用一行命令來完成「自動化編譯」,一旦提供乙個(通常對於乙個工程來說會是多個)正確的 makefile。編譯整個工程你所要做的唯一的一件事就是在shell 提示符下輸入make命令。整個工程完全自動編譯,極大提高了效率。

make是乙個命令工具,它解釋makefile 中的指令(應該說是規則)。在makefile檔案中描述了整個工程所有檔案的編譯順序、編譯規則。makefile 有自己的書寫格式、關鍵字、函式。像c 語言有自己的格式、關鍵字和函式一樣。而且在makefile 中可以使用系統shell所提供的任何命令來完成想要的工作。makefile(在其它的系統上可能是另外的檔名)在絕大多數的ide 開發環境中都在使用,已經成為一種工程的編譯方法。

2、自動化編譯:

一旦寫好,只需要乙個make命令,整個工程完全自動編譯,極大的提高了軟體開發的效率。make是乙個命令工具,是乙個解釋makefile中指令的命令工具,一般來說,大多數的

ide都有這個命令,比如:delphi的make,

visual c++

的nmake,linux下gnu的make。可見,makefile都成為了一種在工程方面的編譯方法。

3、功能:

make工具最主要也是最基本的功能就是通過makefile檔案來描述

源程式之間的相互關係並自動維護編譯工作。而makefile 檔案需要按照某種語法進行編寫,檔案中需要說明如何編譯各個原始檔並連線生成

可執行檔案

,並要求定義原始檔之間的依賴關係。makefile 檔案是許多

編譯器--包括 windows nt 下的編譯器--維護編譯資訊的常用方法,只是在

整合開發環境

中,使用者通過友好的介面修改 makefile 檔案而已。

4、makefile執行過程:

本部分摘自makefile手冊。

gun make的執行過程分為兩個階段。

第一階段:讀取所有的makefile檔案(包括「makifiles」變數指定的、指示符「include」指定的、以及命令列選項「-f(--file)」指定的makefile檔案),內建所有的變數、明確規則和隱含規則,並建立所有目標和依賴之間的依賴關係結構鍊錶。

第二階段:根據第一階段已經建立的依賴關係結構鍊錶決定哪些目標需要更新,並使用對應的規則來重建這些目標。

理解make執行過程的兩個階段是很重要的。它能幫助我們更深入的了解執行過程中變數以及函式是如何被展開的。變數和函式的展開問題是書寫makefile時容易犯錯和引起大家迷惑的地方之一。

具體的執行過程如下:

1. 依次讀取變數「makefiles」定義的makefile檔案列表

2. 讀取工作目錄下的makefile檔案(根據命名的查詢順序「gnumakefile」,「makefile」,「makefile」,首先找到那個就讀取那個)

3. 依次讀取工作目錄makefile檔案中使用指示符「include」包含的檔案

4. 查詢重建所有已讀取的makefile檔案的規則(如果存在乙個目標是當前讀取的某乙個makefile檔案,則執行此規則重建此makefile檔案,完成以後從第一步開始重新執行)

5. 初始化變數值並展開那些需要立即展開的變數和函式並根據預設條件確定執行分支

6. 根據「終極目標」以及其他目標的依賴關係建立依賴關係鍊錶

7. 執行除「終極目標」以外的所有的目標的規則(規則中如果依賴檔案中任乙個檔案的時間戳比目標檔案新,則使用規則所定義的命令重建目標檔案)

8. 執行「終極目標」所在的規則

MakeFile 檔案的作用

makefile檔案儲存了編譯器和聯結器的引數選項,還表述了所有原始檔之間的關係 源 檔案需要的特定的包含檔案,可執行檔案要求包含的目標檔案模組及庫等 建立程式 make程式 首先讀取makefile檔案,然後再啟用編譯器,彙編器,資源編譯器和聯結器以便產生最後的輸出,最後輸出並生成的通常是可執行檔...

UML 及其作用

uml unified modeling language,統一建模語言 是一組用於描述ooad過程的圖形化表達方式。uml為交流物件導向的設計中的需求,行為 體系結構的實現提供了一套綜合的表示法。uml繪製工具,ea 和vsu 2010 uml由9個不同型別的圖組成 用例圖 顯示了系統的外部可視行...

UML 及其作用

uml unified modeling language,統一建模語言 是一組用於描述ooad過程的圖形化表達方式。uml為交流物件導向的設計中的需求,行為 體系結構的實現提供了一套綜合的表示法。uml繪製工具,ea 和vsu 2010 uml由9個不同型別的圖組成 用例圖 顯示了系統的外部可視行...