makefile簡介

Makefile簡介

背景

程序設計通常遵循着一個極爲簡單的慣例:編輯源代碼文件、將源代碼文件編譯成可執行文件以及對成果進行調試。make程序可以讓將一個項目中的源文件編譯成可執行文件之類的工作自動化。相對於腳本,make的優點是:它可以根據文件之間的依賴關係和時間戳判斷應該重新執行那些步驟,以產生需要的程序。有了這個信息,make可以優化編譯的過程,跳過非必要的步驟。

基本構成

基本上,makefile包含了一組用來編譯應用程序的規則。第一條規則被認爲是默認規則。
一項規則可以分爲三個部分:工作目標(target),它的必要條件(prerequisite),以及所要執行的命令(command):

target:prereq1 prereq2 ...
    commands
  • 工作目標是make命令行可以指定的參數,它可以是一個需要創建的文件或者某個動作
  • 必要條件可以有多個,用空白隔開
  • 命令是將被放到shell中執行的命令,可以有多行多條命令。每行必須以tab開頭。

一個實用的makefile中還會包含其他元素,比如自定義的變量、條件判斷指令、內置函數外置函數等。這些都是爲了更方便、全面地描述規則而存在的。

工作機制

make的工作機制很簡單。它首先將來自命令行的參數作爲工作目標,如果沒有指定,則爲默認工作目標。然後按順序查找所有該目標依賴的文件,並依次把依賴文件作爲目標在makefile中查找相應的規則…按此遞歸下去形成依賴樹。樹的葉子節點在makefile中沒有相應的規則更新他們,所以他們必須是已經存在的,否則make報錯:所需文件不存在而且沒有更新他們的規則。(產生也視爲更新操作。)make的規則樹的搜索是先序遍歷,規則的執行是後序遍歷。

規則的執行:如果某個必要條件比目標“新”,則將此規則的命令交給shell執行。而如果工作目標最“新”,則什麼也不做。執行下一條規則。

詳解:
Makefile變量
Makefile規則
Makefile函數
Makefile指令

雜項

-n, –just-print : 用來要求make顯示它將爲工作目標執行的命令,但不實際執行他們。

makefile 中用#註釋之後一行的內容,但是在命令中的內容都會被交給shell,包括#

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章