makefile學習之路——makefile簡介
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 hello和make test則是執行對應目標下的規則,所有,雖然make和make hello的結果是相同的,但是實際上,兩者的意義還是有區別的。
makefile學習之路——makefile簡介