makefille介紹及用法總結(附示例)

2021-08-21 14:36:07 字數 3434 閱讀 6757

makefile

介紹———————

make

命令執行時,需要乙個

makefile

檔案,以告訴

make

命令需要怎麼樣的去編譯和鏈結程式。

首先,我們用乙個示例來說明

makefile

的書寫規則。以便給大家乙個感興認識。這個示例

**於gnu

的make

使用手冊,在這個示例中,我們的工程有8個

c檔案,和

3個頭檔案,我們要寫乙個

makefile

來告訴make

命令如何編譯和鏈結這幾個檔案。

我們的規則是:

1)如果這個工程沒有編譯過,那麼我們的所有

c檔案都要編譯並被鏈結。

2)如果這個工程的某幾個c

檔案被修改,那麼我們只編譯被修改的

c檔案,並鏈結目標程式

3)如果這個工程的標頭檔案被改變了,那麼我們需要編譯引用了這個標頭檔案的所有

c檔案,並鏈結目標程式。

只要我們的

makefile

寫得夠好,所有的這一切,我們只用乙個

make

命令就可以完成,

make

命令會自動智慧型地根據當前的檔案修改的情況來確定哪些檔案需要重編譯,從而自己編譯所需要的檔案和鏈結目標程式。

一、makefile

的規則在講述這個

makefile

之前,還是讓我們先來粗略地看一看

makefile

的規則。

target ... : prerequisites ...

【tab鍵】command

......

target

也就是乙個目標檔案,可以是

object file

,也可以是執行檔案。還可以是乙個標籤

(label

),對於標籤這種特性,在後續的

「偽目標

」章節中會有敘述。

prerequisites

就是,要生成那個

target

所需要的檔案或是目標。

command

也就是make

需要執行的命令。(任意的

shell

命令)這是乙個檔案的依賴關係,也就是說,target

這乙個或多個的目標檔案依賴於

prerequisi

tes中的檔案,其生成規則定義在

command

中。說白一點就是說,

prerequisites

中如果有乙個以上的檔案比

target

檔案要新的話,

command

所定義的命令就會被執行。這就是

makefile

的規則。也就是

makefile

中最核心的內容。

說到底,

makefile

的東西就是這樣一點,好像我的這篇文件也該結束了。呵呵。還不盡然

,這是makefile

的主線和核心,但要寫好乙個

makefile

還不夠,我會以後面一點一點地結合我的工作經驗給你慢慢到來。內容還多著呢。:)

二、示例:

第一步:新建makefile資料夾,在makefile資料夾下面新增需要整合的 .c檔案

如:add.c檔案(呼叫函式):

int add(int a,int b)

sub.c檔案(呼叫函式):

int sub(int a,int b)

operator.c檔案(主程式)

#include

int main()

第二步:建立makefile,vim makefile並新增規則,

格式target ... : prerequisites ...

【tab鍵】command

如:makefilew檔案

版本1:

operator:add.c sub.c operator.c

gcc add.c sub.c operator.c -o operator

此版本作用是利用make命令將所有.c檔案重新編譯成.o檔案

版本2:

operator:add.o sub.o operator.o

gcc add.o sub.o operator.o -o operator

add.o:add.c

gcc -c add.c -o add.o

sub.o:sub.c

gcc -c sub.c -o sub.o

opertor.o:operator.c

gcc -c operator.c -o operator.o

clean:

rm -f *.o operator

此版本的作用與版本1不同的是,利用make命令(make [修改過的檔名])將修改過的.c檔案重新編譯成.o檔案,未修改的不用編譯。這樣大大提高了機器的運算效率。make clean命令是清除所有.o檔案。

版本3:

object=add.o sub.o operator.o     #定義變數

operator:$(object)                         #使用變數

cc $(object) -o operator

clean:

rm -f *.o operator

此版本進一步簡化了操作程式,另外還利用le了makefile自動推導規則的作用

三、總結

makefile 是 make 讀入的唯一配置檔案,因此本節的內容實際就是講述 makefile 的編寫規則。

1、makefile的基本格式:target:dependency

(tab字元)command

注:若dependencyt比target日期新或target不存在,則make會執行command

2、makefile中變數的使用

objects = sum.o sub.o operator.o             #定義變數

$(objects)                                             #使用變數

3、makefile的自動推導(隱晦規則) 

gnu的make很強大,它可以自動推導檔案以及檔案依賴關係後面的命令,於是我們就沒必要去在每乙個[.o]檔案後都寫上類似的命令,因為,我們的make會自動識別,並自己推導命令。只要make看到乙個[.o]檔案,它就會自動的把[.c]檔案加在依賴關係中。如:如果make找到乙個main.o,那麼main.c就會是main.o的依賴檔案。並且gcc -c main.c -o main.o也會被推導出來。 

AT指令介紹及用法

at 指令 at 即attention,at指令集是從終端裝置 terminal equipment,te 或資料終端裝置 data terminal equipment,dte 向終端介面卡 terminal adapter,ta 或資料電路終端裝置 data circuit terminal e...

ServletContext介紹及用法

1.1.介紹 servletcontext官方叫servlet上下文。伺服器會為每乙個工程建立乙個物件,這個物件就是servletcontext物件。這個物件全域性唯一,而且工程內部的所有servlet都共享這個物件。所以叫全域性應用程式共享物件。1.2.作用 1.是乙個域物件 2.可以讀取全域性配...

ServletContext介紹及用法

servletcontext官方叫servlet上下文。伺服器會為每乙個工程建立乙個物件,這個物件就是servletcontext物件。這個物件全域性唯一,而且工程內部的所有servlet都共享這個物件。所以叫全域性應用程式共享物件。2.作用 1.是乙個域物件 2.可以讀取全域性配置引數 3.可以搜...