Linux之make 、makefile的使用方法
◊make是什麼?
make是一個命令工具,是一個解釋makefile中指令的命令工具。它可以簡化編譯過程裡面所下達的指令,當執行 make 時,make 會在當前的目錄下搜尋 Makefile (or makefile) 這個文字檔案,執行對應的操作。make 會自動的判別原始碼是否經過變動了,而自動更新執行檔。
◊為什麼要使用make?
假設,現在一個專案裡面包含了100個程式檔案,如果要對這個專案進行編譯,那麼光是編譯指令就有100條。如果要重新進行編譯,那麼就又得像之前一樣重新來一遍。這樣重複且繁瑣的工作實在是讓我們很不爽啊。所以,用make來進行操作,間接呼叫gcc豈不是很方便?如果我們更動過某些原始碼檔案,則 make 也可以主動的判斷哪一個原始碼與相關的目標檔案檔案有更新過, 並僅更新該檔案。這樣可以減少重新編譯所需要的時間,也會更加方便。
◊makefile又是幹什麼的?
makefile其實就是一個文件,裡面定義了一系列的規則指定哪些檔案需要先編譯,哪些檔案需要後編譯,哪些檔案需要重新編譯,它記錄了原始碼如何編譯的詳細資訊! makefile一旦寫好,只需要一個make命令,整個工程完全自動編譯,極大的提高了軟體開發的效率。
先看一下makefile的規則:
目標(target):目標檔案1 目標檔案2
<Tab>gcc -o 欲建立的執行檔案 目標檔案1 目標檔案2
目標(target)就是我們想要建立的資訊,而目標檔案就是具有相關性的 object files ,建立執行檔案的語法就是以 <tab> 按鍵開頭的那一行!特別留意,『 命令列必須要以 tab 按鍵作為開 頭』才行!它的規則基本上是這樣的:
•在 makefile 當中的 # 代表批註;
•<tab> 需要在命令列 (例如 gcc 這個編譯程式指令) 的第一個字元;
•標的 (target) 與相依檔案(就是目標檔案)之間需以『 :』隔開。
下面舉個例子說明:
先分別建立三個檔案,如圖
建立一個makefile檔案,然後進行規則編寫
現在就可以使用make命令編譯檔案了,這樣是不是很方便呢?
如果不想讓編譯規則顯示在螢幕上,只要在makefile裡規則編寫前加個@它就不會顯示了~
如果現在再對檔案編譯一次會發生什麼?嘿嘿,大家可以自己試一下。
如果想要下達一 個指令就直接清除掉所有的目標檔案與執行檔案,又該怎麼做呢?
我們可以在makefile裡面定義一個clean,執行rm的操作。但是有一點要注意的是,在這裡我們最好使用偽目標進行操作。makefile裡偽目標用.PHONY進行宣告。當一個目標被宣告為偽目標後,make在執行規則時不會去試圖去查詢隱含規則來建立它。這樣就提高了make的執行效率,也解決了檔案目錄中如果出現名為clean檔案,clean操作不被執行的問題。