天天看點

makefile入門,這一篇就夠了

定義

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

./

表示在目前路徑)

makefile入門,這一篇就夠了

可發現

已經列印輸出!

參考文章:

https://blog.csdn.net/afei__/article/details/82696682

http://c.biancheng.net/view/7091.html

繼續閱讀