Makefile 入門與基本語法

2021-07-02 15:51:01 字數 1467 閱讀 2960

在我看來,學會寫簡單的makefile,閱讀較複雜的makefile,是每乙個linux程式設計師都必須擁有的基本素質。makefile可以自動識別哪些原始檔被更改過,需要重新編譯,那些不需要。從而節省大型工程重新編譯的時間。規則如下:

如果這個工程沒有編譯過,那麼我們的所有c檔案都要編譯並被鏈結。

如果這個工程的某幾個c檔案被修改,那麼我們只編譯被修改的c檔案,並鏈結目標程。

如果這個工程的標頭檔案被改變了,那麼我們需要編譯引用了這幾個標頭檔案的c檔案,並鏈結目標程式。

學會編寫makefile,不僅僅有益於你在linux下編寫大型工程。同時也能幫助你理解編譯原理。遠離ide,了解編譯過程。

廢話少說,makefile其實最主要的語法只有一句:

target ... : prerequisites ...

command......

target就是目標檔案,prerequisites表示所有生成目標檔案所需的擁有依賴關係的檔案。command就是由依賴檔案生成目標檔案的編譯命令。

所以,對於單個的.c檔案,乙個最最簡單的makefile如下:

object: main.c

gcc -o object main.c

當然,對於單個c檔案使用makefile幾乎沒有意義。

下面來看乙個稍複雜一點兒的makefile檔案:

dir=./

object: main.o 1.o 2.o

gcc -o object main.o 1.o 2.o

1.o: 1.c my.h

gcc -c 1.c

2.o: 2.c my.h

gcc -c 2.c

main.o: main.c my.h

gcc -c main.c

.phony: clean

clean:

rm $(dir).o object

這是乙個稍有實用價值的makefile,工程由四個原始檔構成:my.h 1.c 2.c main.c。

放在最前面的

dir=./
是變數定義。makefile中的的變數定義多為字串,主要目的是為了避免重複長字串輸入。

1.o 2.o main.o 分別是三個原始檔生成的鏈結檔案。如果你不知道鏈結檔案是什麼。。。。找度娘吧。。

首先第乙個target一般為最終目標檔案,之後的target一般為過程檔案。

.phony是用來定義偽目標用的。偽目標不是實際要生成的檔案,一般為make命令帶入的引數。例如上面檔案中的clean,其對應的命令為清除所有中間檔案以及最後的目標檔案。

其實,一般不定義偽目標也是ok的,但是一旦目錄下出現了和偽目標重名的檔案。這時候makefile執行偽目標命令就會出錯。因為makefile不知道這是偽目標,而偽目標又沒有依賴檔案,所以makefile會跳過偽目標檔案對應的命令。

makefile基本語法

main.c為主體,input.c負責接收從鍵盤輸入的數值,calcu.h進行任意兩個數相加 這裡面當 特別多的時候 gcc main.c input.c calcu.c o main 這行 就比較長 有一種辦法是分別把main,input,calcu編譯成點o檔案,然後再gcc連線 gcc c m...

Makefile基礎語法入門

makefile 是一種常用於編譯的指令碼語言。它可以更好更方便的管理你的專案的 編譯,節約編譯時間 沒改動的檔案不編譯 注意 makefile 檔案命令必須是 makefile 或者 makefile,並使用 make 命令編譯。目標.依賴.命令1命令2 目標即要生成的檔案。如果目標檔案的更新時間...

python入門 基本語法

標準資料型別 number 數字 string 字串 list 列表 tuple 元組 sets 集合 dictionary 字典 number只支援int 表示長整型 float,bool,complex 複數 python中有type 函式檢測變數型別 del 要刪除物件 可以刪除物件 1 py...