◊make是什麼? make是一個命令工具,是一個解釋makefile中指令的命令工具。它可以簡化編譯過程裡面所下達的指令,當執行 make 時,make 會在當前的目錄下搜尋 Makefile (or makefile) 這個文本文件,執行對應的操作。make 會自動的判別原始碼是否經過變動了,而 ...
◊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操作不被執行的問題。