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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Makefile_03:Makefile介绍(作用、例子、原理)

發(fā)布時(shí)間:2025/6/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Makefile_03:Makefile介绍(作用、例子、原理) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、Makefile 作用

Make 命令執(zhí)行時(shí),需要一個(gè) Makefile 文件,以告訴 make 命令需要怎么樣的去編譯和鏈接程序。make 命令會(huì)自動(dòng)智能地根據(jù)當(dāng)前的文件修改的情況來確定哪些文件需要重編譯,從而自己編譯所需要的文件和鏈接目標(biāo)程序。我們的規(guī)則是:

1)如果這個(gè)工程沒有編譯過,那么我們的所有 C 文件都要編譯并被鏈接。

2)如果這個(gè)工程的某幾個(gè) C 文件被修改,那么我們只編譯被修改的 C 文件,并鏈接目標(biāo)程。

3)如果這個(gè)工程的頭文件被改變了,那么我們需要編譯引用了這幾個(gè)頭文件的 C 文件,并鏈接目標(biāo)程序。

Makefile的核心和主線規(guī)范如下 ------------------------------------------------ target ... : prerequisites ...command ...或者targets : prerequisites ; commandcommand ... ------------------------------------------------ PS:target 目標(biāo)文件依賴于prerequisites 中的文件,其生成規(guī)則定義在 command 中. (1)target 是一個(gè)目標(biāo)文件,可以是 中間代碼文件、執(zhí)行文件,還可以是一個(gè)標(biāo)簽(Label)。 (2)prerequisites 就是要生成那個(gè) target 所需要的文件。 (3)command 也就是 make 需要執(zhí)行的命令,任意的 Shell 命令。 (4)如果mommand命令,于prerequisites不在一行,那command必須要以[Tab]鍵開始, 如果和 prerequisites 在一行,那么可以用分號(hào)做為分隔。

二、例子

比如我們的工程有 8 個(gè) C 文件和 3 個(gè)頭文件,我們要寫一個(gè) Makefile 來告訴 Make 命令如何編譯和鏈接這幾個(gè)文件。

edit : main.o kbd.o command.o display.o \insert.o search.o files.o utils.occ -o edit main.o kbd.o command.o display.o \insert.o search.o files.o utils.omain.o : main.c defs.hcc -c main.c kbd.o : kbd.c defs.h command.hcc -c kbd.c command.o : command.c defs.h command.hcc -c command.c display.o : display.c defs.h buffer.hcc -c display.c insert.o : insert.c defs.h buffer.hcc -c insert.c search.o : search.c defs.h buffer.hcc -c search.c files.o : files.c defs.h buffer.h command.hcc -c files.c utils.o : utils.c defs.hcc -c utils.c clean :rm edit main.o kbd.o command.o display.o \insert.o search.o files.o utils.o

(1)反斜杠(\)是換行符的意思。

(2)我們把這個(gè)內(nèi)容保存在文件為“Makefile”或“makefile”的文件中,然后在該目錄下直接輸入命令“make” 就可以生成執(zhí)行文件 edit。

(3)在定義好依賴關(guān)系后,后續(xù)的那一行定義了如何生成目標(biāo)文件的操作系統(tǒng)命令,一定要 以一個(gè) Tab 鍵作為開頭。記住,make 并不管命令是怎么工作的,他只管執(zhí)行所定義的命令。 make 會(huì)比較 targets 文件和 prerequisites 文件的修改日期,如果 prerequisites 文件的 日期要比 targets 文件的日期要新,或者 target 不存在的話,那么,make 就會(huì)執(zhí)行后續(xù)定義的命令。

(4)如果要?jiǎng)h除執(zhí)行文件和所有的中間目標(biāo)文件,那么,只要簡(jiǎn)單 地執(zhí)行一下“make clean”就可以了。clean 不是一個(gè)文件,它只不過是一個(gè)動(dòng)作名字,我們可以在一個(gè) makefile 中定義不用的編譯或是和 編譯無關(guān)的命令,比如程序的打包,程序的備份,等等。

(5)gcc參數(shù)含義

-g 可執(zhí)行程序包含調(diào)試信息
-o 指定輸出文件名
-c 只編譯不鏈接

三、Make如何工作

1、make 會(huì)在當(dāng)前目錄下找名字叫“Makefile”或“makefile”的文件。

2、如果找到,它會(huì)找文件中的第一個(gè)目標(biāo)文件(target),在上面的例子中,他會(huì)找到 “edit”這個(gè)文件,并把這個(gè)文件作為最終的目標(biāo)文件。

3、如果 edit 文件不存在,或是 edit 所依賴的后面的 .o 文件的文件修改時(shí)間要比 edit 這個(gè)文件新,那么,他就會(huì)執(zhí)行后面所定義的命令來生成 edit 這個(gè)文件。

4、如果 edit 所依賴的.o 文件也存在,那么 make 會(huì)在當(dāng)前文件中找目標(biāo)為.o 文件的依 賴性,如果找到則再根據(jù)那一個(gè)規(guī)則生成.o 文件。(這有點(diǎn)像一個(gè)堆棧的過程)

5、當(dāng)然,你的 C 文件和 H 文件是存在的啦,于是 make 會(huì)生成 .o 文件,然后再用 .o 文 件生命 make 的終極任務(wù),也就是執(zhí)行文件 edit 了。

四、Makefile 里有什么?

Makefile 里主要包含了五個(gè)東西:顯式規(guī)則、隱晦規(guī)則、變量定義、文件指示和注釋。

1、顯式規(guī)則

顯式規(guī)則說明了,如何生成一個(gè)或多的的目標(biāo)文件。這是由 Makefile 的書寫者明顯指 出,要生成的文件,文件的依賴文件,生成的命令。

2、隱晦規(guī)則

由于我們的 make 有自動(dòng)推導(dǎo)的功能,所以隱晦的規(guī)則可以讓我們比較粗糙地簡(jiǎn)略地書 寫 Makefile,這是由 make 所支持的。

3、變量的定義

在 Makefile 中我們要定義一系列的變量,變量一般都是字符串,這個(gè)有點(diǎn)你 C 語言中 的宏,當(dāng) Makefile 被執(zhí)行時(shí),其中的變量都會(huì)被擴(kuò)展到相應(yīng)的引用位置上。

4、文件指示

(1)在一個(gè) Makefile 中引用另一個(gè) Makefile,就像 C 語言中的 include 一樣;

(2)根據(jù)某些情況指定 Makefile 中的有效部分,就像 C 語言中的預(yù) 編譯#if 一樣;

(3)定義一個(gè)多行的命令。(后續(xù)講)

5、注釋

Makefile 中只有行注釋,和 UNIX 的 Shell 腳本一樣,其注釋是用“#”字符,這個(gè)就像 C/C++中的“//”一樣。如果你要在你的 Makefile 中使用“#”字符,可以用反斜框進(jìn)行轉(zhuǎn)義,如:“\#”。

五、Makefile文件名

建議命名成“Makefile”,首字母大寫。

當(dāng) 然 , 你 可 以 使 用 別 的 文 件 名 來 書 寫 Makefile , 比 如 : “Make.Linux” , “Make.Solaris”,“Make.AIX”等,如果要指定特定的 Makefile,你可以使用 make 的 “-f”和“--file”參數(shù),如:make -f Make.Linux 或 make --file Make.AIX。

?

?

?

總結(jié)

以上是生活随笔為你收集整理的Makefile_03:Makefile介绍(作用、例子、原理)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 超碰97在线资源站 | 亚洲欧洲在线播放 | 久中文字幕 | 午夜青青草 | 依依av| 亚洲色图25p | 国产精品美女久久久 | 新狠狠干 | 国产在线视频一区二区三区 | 91色伦| 国产精品18久久久 | 五月开心激情 | 国内福利视频 | 亚洲成a人v| 欧美一级片在线视频 | 精品乱码一区内射人妻无码 | av丁香| 97人人爽 | 中国国语农村大片 | 久久av在线播放 | 精品无码一区二区三区在线 | 亚欧av在线| 婷婷一区二区三区 | 欧美人与性禽动交精品 | 在线免费看av片 | 国产欧美视频在线播放 | 男人的天堂一区 | 亚洲美女视频一区 | 可以免费看毛片的网站 | 亚洲骚片 | 亚洲色婷婷久久精品av蜜桃 | 老妇荒淫牲艳史 | 在线观看欧美精品 | 深爱激情av | 国产懂色av | 被各种性器调教到哭vk | 日本少妇高潮抽搐 | 午夜精品久久久久久 | 色哟哟视频 | 国产欧美久久一区二区三区 | 波多野结衣亚洲一区二区 | 仙踪林久久久久久久999 | 精品香蕉一区二区三区 | 国产精品九 | 免费欧美黄色 | 光明影院手机版在线观看免费 | 精品国产99| 国产一级在线观看视频 | 亚洲天堂最新 | 国产一级影片 | 久久久久久久久久久97 | 国产成人午夜 | 精品人伦一区二区三区 | 久久免费观看视频 | 91麻豆免费视频 | 成人免费无码大片a毛片 | 成人精品视频在线播放 | 免费看欧美一级特黄a大片 国产免费的av | 在线97视频| 在线观看的免费 | 性欧美一区二区 | 亚洲香蕉av| 青草操 | 国语对白做受xxxxx在线中国 | 奇米777视频| 黄色网av| 91尤物在线 | 国产一级一片 | 黄色a在线| 精品国产露脸精彩对白 | 中文字幕在线网站 | 色欲av永久无码精品无码蜜桃 | 色女孩综合网 | 久久精品视频网站 | 阿v天堂2014 这里有精品 | 成人午夜在线免费观看 | 亚洲AV综合色区国产精品天天 | 久久国产网站 | 又色又爽又高潮免费视频国产 | 黄色a一级 | 日日碰狠狠添天天爽无码av | 婷婷综合另类小说色区 | 天狂传说之巴啦啦小魔仙 | 国产另类视频 | 国产一级片免费观看 | 在线观看视频免费 | 中文字幕第12页 | 成人精品视频99在线观看免费 | 亚洲自拍小视频 | 亚洲综合一二三 | 亚洲偷怕| 亚洲人成电影在线播放 | 中文字幕天堂在线 | 精品久久久久久久 | 国产免费福利视频 | 黄色伊人 | 在线精品国产 | 污视频网站在线播放 | 美女18网站 |