1. 程式人生 > >makefile學習之路——makefile簡介

makefile學習之路——makefile簡介

makefile linux

一、make簡介

make是一個指令工具,它解釋makefile中的指令或者說規則。makefile文件描述了整個工程中所有文件的**編譯順序,編譯規則**。Makefile也有自己的編寫規則,通常,我們所使用的IDE都會生成相應的makefile,然後再根據makefile來進行編譯,只是這些操作是由IDE來完成,我們只需要點擊一個編譯按鈕。

二、為什麽要使用make

現在可以在GitHub上看到,很多的開源項目,在編譯的時候,都是使用make來完成的,也就是說,都有其對應的makefile。他們都有個特點,那就是文件很多。

考慮這樣一種情況,我們的項目現在有三、四十個文件,你使用的不是IDE工具,而是命令行,那麽不同的人,在編譯你的項目的時候,都需要一個一個文件的

gcc -o asample.c bsample.c ...... xxx.out

,這樣慢慢的一個文件,一個文件的去找到以後再編譯嗎?

答案肯定是否定的,當你工程的文件多了以後,時間一長,可能你自己都不能記住所有的文件。所以,這個時候我們就可以使用make來根據makefile對整個項目進行管理。除此之外,make還有一個優點,那就是當你修改你的文件以後,make只會編譯更新的文件以及它相關依賴的文件。這裏後邊進行詳細的解釋,意思就是,當你只修改了幾十個文件中的某一個文件時,make只會重新編譯跟你修改的文件有關聯的文件,而不是所有的文件。這就大大的減短了編譯的時間。



三、makefile簡介

在我們執行make之前,需要有一個名為makefile或Makefile的文件。這個文件用來告訴make需要完成什麽樣的操作。我們可以簡單的把makefile認為是一份定義了源文件間依賴關系、如何編譯各個源文件並生成可執行文件

的說明書。


四、makefile的基本結構

TARGET... : PREREQUISITES...
    COMMAND
    ...
    ...

TARGET:規則的目標,最終生成文件的名字或者是中間過程文件名,也可以是make執行的動作的名稱。

PREREQUISITES:規則的依賴,生成目標所必須的文件名列表。

COMMAND:規則的命令。規則需要執行的動作

註意:這裏需要註意的是,命令前面使用的是TAB鍵,而不是空格,使用空格會出現錯誤。



五、第一個makefile

makefile文件內容如下

hello : 
    echo "hello makefile"
test : 
    echo "test"
    pwd
    ls


執行結果如圖所示

技術分享圖片

從圖中可以看到,我們執行make時,打印了echo "hello makefile"hello makefile兩句話。使用make hello的結果跟make相同,而使用make test,的打印結果,則與前面兩者不同。

為什麽會是這樣呢?

因為make在執行時,如果沒有參數,那麽就會首先執行第一個規則,而make hellomake test則是執行對應目標下的規則,所有,雖然makemake hello的結果是相同的,但是實際上,兩者的意義還是有區別的。






makefile學習之路——makefile簡介