日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Makefile —— Makefile的规则是什么?make是如何工作的?make的工作方式是什么?

發(fā)布時(shí)間:2025/10/17 编程问答 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Makefile —— Makefile的规则是什么?make是如何工作的?make的工作方式是什么? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

#1、Makefile的規(guī)則:
# ? target... : prerequisites...
#?? ??? ?command

target是:【目標(biāo)文件:包含執(zhí)行文件edit與中間目標(biāo)文件(*.o)文件】
prerequisites是: 【依賴文件:包含冒號后面那些.c文件與.h文件;edit的依賴文件是所有.o文件】
command是:【命令:定義了如何生成目標(biāo)文件的操作系統(tǒng)命令,一定要以Tab鍵作為開頭】

#2、make什么時(shí)候執(zhí)行command命令?
#?? ?make會(huì)比較targets文件和prerequisites文件的修改日期,如果prerequisutes文件的日期要比targets文件的日期要新,或者target不存在的話,那么,make就會(huì)執(zhí)行后續(xù)定義的命令

#3、clean不是一個(gè)文件,它不過是一個(gè)動(dòng)作名字,有點(diǎn)像c語言中的lable一樣,
#?? ??? ??? ?其冒號后什么也沒有,那么,make就不會(huì)自動(dòng)去找文件的依賴性,也就不會(huì)自動(dòng)執(zhí)行其后所定義的命令
#?? ??? ??? ?要執(zhí)行其后的命令,就要在make命令后明顯的指出這個(gè)lable的名字。?? ?
#?? ?為了避免和文件重名的這種情況,我們可以使用一個(gè)特殊標(biāo)記".PHONY"來顯示地知名一個(gè)目標(biāo)是"偽目標(biāo)"
#?? ??? ??? ?向make說明,不管是都有這個(gè)文件,這個(gè)目標(biāo)就是"偽目標(biāo)"

a.c a.h b.c b.h common.h文件代碼如下:

#a.c [root@localhost MakeFile]# cat a.c #include "common.h" #include "a.h"int main(void) {printf("aaa\n");testb();printf("a:%d\n", strlen("asafxxxxxx"));return 0; }#a.h [root@localhost MakeFile]# cat a.h #include <stdio.h>#b.c [root@localhost MakeFile]# cat b.c #include "common.h" #include "b.h"void testb(void) {printf("bbb\n");printf("b:%d\n", strlen("asaf"));return ; }#b.h [root@localhost MakeFile]# cat b.h #include <stdio.h>#common.h [root@localhost MakeFile]# cat common.h #include <string.h> #include <unistd.h>

Makefile文件代碼如下:?

export CC=gcc?all:edit@echo "all"edit:b.o a.o@$(CC) a.o b.o -o edit@echo "edit" a.o:a.c a.h common.h@$(CC) -c a.c -o a.o@echo "a.o" b.o:b.c b.h common.h@$(CC) -c b.c -o b.o@echo "b.o".PHONY:clean clean:@rm a.o b.o edit -f

# 4、make是如何工作的?
# 若工程首次被編譯:
# 1》make會(huì)在當(dāng)前目錄下找到"Makefile"的文件;
# 2》如果找到,就會(huì)找文件中的第一個(gè)目標(biāo)文件(target),在上面的例子中找到"all"這個(gè)文件;
# 3》"all"所需的目標(biāo)是"edit","edit"文件所需文件都為[.o]文件,所以此文件作為最終的目標(biāo)文件;
# 4》如果edit文件不存在,或者是edit所依賴的后面的[.o]文件的文件修改時(shí)間要比edit這個(gè)文件新,
# ?? ?那么,他就會(huì)執(zhí)行后面所定義的命令來生成edit這個(gè)文件;
# 5》如果edit所依賴的.o文件也存在,那么make會(huì)在當(dāng)前文件中找目標(biāo)為.o文件的依賴性,
# ?? ?如果找到,則再根據(jù)那一個(gè)規(guī)則生成.o文件;
# 6》執(zhí)行edit文件。

結(jié)果如下:

[root@localhost MakeFile]# make -f 1_makefile.bak b.o a.o edit all [root@localhost MakeFile]# ./edit aaa bbb b:4 a:10# # # 若工程未被編譯過: # ?? ??? ?打印結(jié)果為: b.o >然后是> a.o >然后是> ?edit >然后是> all # 若編譯好后,只是修改了a.h文件: # ?? ??? ?打印結(jié)果為: ?a.o >然后是> edit >然后是> all #

# make的工作方式:
# ?? ?1》讀入所有的Makefile
# ?? ?2》讀入被include的其他的Makefile
# ?? ?3》初始化文件中的變量
# ?? ?4》推導(dǎo)隱晦規(guī)則,并分析所有規(guī)則
# ?? ?5》為所有的目標(biāo)文件創(chuàng)建依賴關(guān)系鏈
# ?? ?6》依據(jù)依賴關(guān)系,決定那些目標(biāo)要重新生成
# ?? ?7》執(zhí)行生成命令

總結(jié)

以上是生活随笔為你收集整理的Makefile —— Makefile的规则是什么?make是如何工作的?make的工作方式是什么?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。