定義
Makefile 可以簡單的認為是一個工程檔案的編譯規則,描述了整個工程的編譯和連結等規則。其中包含了那些檔案需要編譯,那些檔案不需要編譯,那些檔案需要先編譯,那些檔案需要後編譯,那些檔案需要重建等等。編譯整個工程需要涉及到的,在 Makefile 中都可以進行描述。換句話說,Makefile 可以使得我們的項目工程的編譯變得自動化,不需要每次都手動輸入一堆源檔案和參數。
學習原因
在 Windows 下作開發的話不需要去考慮這個問題,因為 Windows 下的內建開發環境(IDE)已經内置了 Makefile,或者說會自動生成 Makefile,我們不用去手動編寫。
Linux 中卻不能這樣,需要我們去手動的完成這項工作。Linux 下可以學習的開發語言有很多,常見的有 C/C++語言、python、java 等等。如果你想要在 Linux(Unix) 下做開發的話,不了解 Makefile 是一件非常失敗的事情,甚至說你就成為不了一個合格的 Linux 開發工程師。不懂 Makefile,就操作不了多檔案程式設計,就完成不了相對于大的工程項目的操作。如果你想在 Linux(Unix) 環境下做開發的話,Makefile 是必須掌握的一項技能。
優勢
Makefile 檔案描述了 Linux 系統下 C/C++ 工程的編譯規則,它用來自動化編譯 C/C++ 項目。一旦寫編寫好 Makefile 檔案,隻需要一個 make 指令,整個工程就開始自動編譯,不再需要手動執行 GCC 指令。
makefile文法格式
ALL:目标
目标:依賴
指令一
指令二
.......
下面分别說明一下屬性
ALL
Makefile 檔案預設隻生成第一個目标檔案即完成編譯,但是我們可以通過 “ALL” 指定需要生成的目标檔案。
目标
即我們目标需要生成的檔案,如果目标檔案的更新時間晚于依賴檔案的更新時間,則說明依賴檔案沒有改動,目标檔案不需要重新編譯。否則重新編譯并更新目标。
依賴
即目标檔案由哪些檔案生成。如果依賴條件中存在不存在的依賴條件,則會尋找其它規則是否可以産生依賴條件。
例如:規則一是生成目标 hello.out 需要使用到依賴條件 hello.o,但是 hello.o 不存在。則 Makefile 會尋找到一個生成 hello.o 的規則二并執行。
指令
即通過執行該指令,由依賴檔案生成目标檔案。
注意每條指令前必須有且僅有一個
tab
保持縮進,這是文法要求。
入門示例
1.先建立一個hello.c檔案
vim hello.c
#include<stdio.h>
int main(){
printf("Hello,Linux!");
return 0;
}
2.建立
Makefile
檔案(注意名稱大小寫)
vim Makefile
寫入以下内容
# ALL:目标
ALL:abc.out
# 目标:依賴
abc.out:hello.c
# 指令
gcc hello.c -o abc.out
3.執行make
在指令行輸入
make
即可
4.最後輸入生成的可執行檔案
abc.out
(
./
表示在目前路徑)

可發現
已經列印輸出!
參考文章:
https://blog.csdn.net/afei__/article/details/82696682
http://c.biancheng.net/view/7091.html