Makefile基本使用

2021-09-21 18:39:01 字數 2045 閱讀 6949

首先我們先來看乙個示例**

c++**

/*hello.c*/

#include using namespace std;

int main()

makefile檔案

hello:hello.o

g++ hello.o -o hello

hello.o:hello.s

g++ -c hello.s -o hello.o

hello.s:hello.i

g++ -s hello.i -o hello.s

hello.i:hello.c

g++ -e hello.c -o hello.i

.phony:clean

clean:

rm -f hello.i hello.s hello.o hello

依賴關係

依賴方法

看到上邊的簡單例子,很容易發現它主要分成了三個部分,冒號之前的hello(hello.o,hello.s,hello.i),我們稱之為目標檔案(target),被認為是這條語句所要生成的目標物件;冒號後面的部分hello.o(hello.s,hello.i,hello.c),我們稱之為依賴關係表,也就是需要編譯target檔案所需要的檔案,這些檔案只要有乙個發生了變化就會觸發該語句的第三部分,我們稱之為命令部分,相信你也可以看得出這是一條編譯命令。

請注意!在gcc命令之前必須是乙個tab縮排,而不能是空格

語法規定make file中的命令之前必須要有乙個tab縮排,否則make時會報錯

在我們輸入make命令後,make會在當前目錄下找名字叫做「makefile」或者」makefile「的檔案

如果找到,它會找檔案中的第乙個目標檔案(target),在上邊的例子中,它會找到"hello"這個檔案,並把這個檔案當作最終的目標檔案

如果hello檔案不存在,或是hello所依賴的後面的hello.o檔案的檔案修改時間要比hello這個檔案新,那麼它就會去執行後面所定義的命令去生成這個hello檔案

如果hello所依賴的hello.o檔案不存在,那麼make會在當前檔案中找hello.o檔案的依賴性,如果找到則再根據那乙個規則去生成hello.o檔案

這就是make的依賴性,make會一層又一層地去找檔案的依賴關係,直到最終編譯出第乙個目標檔案

在找尋的過程中,如果出現錯誤,比如最後被依賴的檔案找不到,那麼make就會直接退出,並報錯,而對於所定義的命令的錯誤,或者是編譯不成功,make則不會理會

學會了上邊的基礎使用後,我們來看一看下邊的**

cc = g++

prom = hello

source = hello.c

$(prom):$(source)

$(cc) $(source) -o $(prom)

如你所見,我們在上述**中定義了 三個常量cc,prom,source。它們分別告訴了make我們所要使用的編譯器,要編譯的檔案以及原始檔。這樣我們在需要修改這三者中的任何一項時只需要修改常量的定義即可,而不用去管後面的**

在這裡再介紹幾個特殊的巨集:

%.o:%.c

這是乙個模式規則,表示所有的.o目標都依賴於與它同名的.c檔案

引用的是整個關係表

代表的是依賴關係表中的第一項

代表的是目標檔案

像clean這種,沒有被第乙個目標檔案直接或間接關聯,那麼它後面所定義的命令將不會被自動執行,不過,我們可以顯式用make來執行,即命令——「make clean」,以此來清楚所有的目標檔案,以便重新編譯。

但是一般這種clean的目標檔案,我們會將它設定為偽目標,用**.phony**修飾,偽目標的特性是——它是被執行的

makefile的基本使用方法

makefile的基本使用方法 有三個檔案,file1.c file2.c file3.h,第乙個檔案呼叫第二個檔案的函式,第三個檔案為標頭檔案,其makefile為 gobbin file1.o file2.o gobbin為程式名稱,依賴於file1.o file2.o兩個目標檔案 gcc fi...

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的規則 target prerequisities command target可以是obj檔案 也可以是目標檔案 也可以是lable 標籤 prerequisities 指的生成target所需要的依賴檔案或目標 command指的是執行的make命令,任意的shell命令 g w...