久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Linux自動(dòng)化構(gòu)建工具make和Makefile如何使用

共計(jì) 2683 個(gè)字符,預(yù)計(jì)需要花費(fèi) 7 分鐘才能閱讀完成。

這篇文章主要介紹“Linux 自動(dòng)化構(gòu)建工具 make 和 Makefile 如何使用”,在日常操作中,相信很多人在 Linux 自動(dòng)化構(gòu)建工具 make 和 Makefile 如何使用問(wèn)題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Linux 自動(dòng)化構(gòu)建工具 make 和 Makefile 如何使用”的疑惑有所幫助!接下來(lái),請(qǐng)跟著丸趣 TV 小編一起來(lái)學(xué)習(xí)吧!

一、make 和 Makefile 的作用

在一個(gè)工程中的源文件不計(jì)數(shù),其按類型、功能、模塊分別放在若干個(gè)目錄中,makefile 定義了一系列的 規(guī)則來(lái)指定,哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至于進(jìn)行更復(fù)雜 的功能操作。

所以,makefile 帶來(lái)的好處就是 mdash; mdash;“自動(dòng)化編譯”,一旦寫好,只需要一個(gè) make 命令,整個(gè)工程完全自動(dòng)編 譯,極大的提高了軟件開發(fā)的效率。

make 是一個(gè)命令工具,是一個(gè)解釋 makefile 中指令的命令工具,一般來(lái)說(shuō),大多數(shù)的 IDE 都有這個(gè)命 令,比如:Delphi 的 make,Visual C++ 的 nmake,Linux 下 GNU 的 make。可見,makefile 都成為了一 種在工程方面的編譯方法。make 是一條命令,makefile 是一個(gè)文件,兩個(gè)搭配使用,就可以完成項(xiàng)目自動(dòng)化構(gòu)建。

二、make 和 Makefile 的使用

在了解依賴關(guān)系和依賴方法之前,我們來(lái)寫一個(gè) C 語(yǔ)言的小程序。

我們創(chuàng)建了一個(gè) make.c 的文件,并寫上了一句 hello make 的代碼。

那么我們?cè)賱?chuàng)建一個(gè) Makefile 文件 (makefile 也可以,但不建議)。

然后我們編輯 Makefile 文件并寫上如下代碼:

然后我們保存退出。

然后我們可以執(zhí)行 make 命令。如果提示 make 不存在,則是因?yàn)闆]有安裝,可以切換至 root 身份安裝。安裝代碼:yum install make 或者 sudo install make。

正常執(zhí)行 make 后會(huì)出現(xiàn)如下顯示。

然后我們 ll 來(lái)查看當(dāng)前目錄下的文件。

我們可以發(fā)現(xiàn)多了一個(gè)可執(zhí)行程序 make。那我們運(yùn)行用 ./make 運(yùn)行試試。

我們會(huì)發(fā)現(xiàn)這個(gè)可執(zhí)行程序輸出 make。

這就是我們的自動(dòng)化構(gòu)建工具,只需要在 Makefile 里面配置一下。往后直接輸入 make 即可編譯代碼。那我們?cè)佥斎胍淮?make 試試。

提示我們 make 程序是最新的。也就是說(shuō),如果你沒有修改或者更新程序的話。那么則不會(huì)為你編譯,因?yàn)槟愠绦蚨紱]動(dòng)呀,編譯它干嘛。

那么此時(shí)我們回過(guò)來(lái)分析一下 Makefile 里面寫的代碼。

首先我們把它分為三部分

make

make.c

gcc make.c -o make -std=c99

這三者的關(guān)系就是,make 是依賴于 make.c 產(chǎn)生的。它們兩者有依賴關(guān)系,而 gcc make.c -o make -std=c99 則是 make 依賴于 make.c 的方法,叫依賴方法。

什么是依賴關(guān)系和依賴方法?

打個(gè)比方。

月底了,你的生活費(fèi)用光了。這個(gè)時(shí)候你給你爸爸打電話,和他說(shuō):“爸,月底了。我沒錢了。。此時(shí)你的爸爸就知道了,會(huì)給你打生活費(fèi)。這里面,你和你的父親是父子關(guān)系,所以你依賴于你的父親,你們之間有依賴關(guān)系。而你的父親給你生活費(fèi),這是你依賴父親的一種方式,所以這就是依賴方法。如果此時(shí)你給你室友的父親打電話要生活費(fèi),他會(huì)直接讓你滾。因?yàn)槟銈兏静粯?gòu)成依賴關(guān)系,不構(gòu)成依賴關(guān)系就沒有依賴方法。

所以我的程序也是一樣的。make 是生成的可執(zhí)行程序。而它依賴于 make.c,因?yàn)樗菑?make.c 編譯來(lái)的。而依賴方法則是 執(zhí)行 gcc make.c -o make -std=c99 這條命令。

依賴關(guān)系的原理

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

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

如果 hello 文件不存在,或是 hello 所依賴的后面的 test.o 文件的文件修改時(shí)間要比 test 這個(gè)文件新(可 以用 touch 測(cè)試),那么,他就會(huì)執(zhí)行后面所定義的命令來(lái)生成 test 這個(gè)文件。

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

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

這就是整個(gè) make 的依賴性,make 會(huì)一層又一層地去找文件的依賴關(guān)系,直到最終編譯出第一個(gè)目標(biāo)文 件。

在找尋的過(guò)程中,如果出現(xiàn)錯(cuò)誤,比如最后被依賴的文件找不到,那么 make 就會(huì)直接退出,并報(bào)錯(cuò),而對(duì)于所定義的命令的錯(cuò)誤,或是編譯不成功,make 根本不理。

make 只管文件的依賴性,即,如果在我找了依賴關(guān)系之后,冒號(hào)后面的文件還是不在,那么對(duì)不起,我就不工作啦。

清理

我們平時(shí)在寫代碼的時(shí)候,經(jīng)常會(huì)需要反復(fù)編譯,執(zhí)行代碼。

而在下一次重新編譯之前,需要清理一下上次生成的可執(zhí)行程序。但是清理的時(shí)候可能清理錯(cuò)誤,不小心把源文件刪了,這時(shí)又造成了問(wèn)題。

那么我們有沒有方法解決呢?答案是當(dāng)然有。

我們繼續(xù)編輯 Makefile 文件。

我們?cè)谠械幕A(chǔ)上加上了

.PHONY:clean
clean:
 rm -f make

那么.PHONY 有什么作用呢?

.PHONY 修飾的是一個(gè)偽目標(biāo)的,偽目標(biāo)總是被執(zhí)行的。clean 是自己定義的一條 make 指令,使用方法為 make clean

那我們來(lái)試試吧這條指令

我們可以看到它被清理了,那為什么說(shuō)偽目標(biāo)它總是被執(zhí)行的呢?我們多次執(zhí)行它看看。

我們可以一直執(zhí)行它,那么我們多次執(zhí)行 make 呢?

Linux 自動(dòng)化構(gòu)建工具 make 和 Makefile 如何使用

我們會(huì)發(fā)現(xiàn),make 執(zhí)行了一次,就無(wú)法執(zhí)行了,因?yàn)闆]有被.PHONY 修飾。那么我用.PHONY 修飾它再試試。

Linux 自動(dòng)化構(gòu)建工具 make 和 Makefile 如何使用

然后我們保存退出,多次執(zhí)行 make

Linux 自動(dòng)化構(gòu)建工具 make 和 Makefile 如何使用

我們就可以看到它被多次執(zhí)行了。但我覺得沒有這個(gè)必要,因?yàn)槲募]有被修改的話。重新編譯沒有意義,所以自動(dòng)化編譯不建議加上.PHONY

我們保存退出,多次執(zhí)行 make

Linux 自動(dòng)化構(gòu)建工具 make 和 Makefile 如何使用

我們就可以看到它被多次執(zhí)行了。但我覺得沒有這個(gè)必要,因?yàn)槲募]有被修改的話。重新編譯沒有意義,所以自動(dòng)化編譯不建議加上.PHONY

到此,關(guān)于“Linux 自動(dòng)化構(gòu)建工具 make 和 Makefile 如何使用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注丸趣 TV 網(wǎng)站,丸趣 TV 小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-07-12發(fā)表,共計(jì)2683字。
轉(zhuǎn)載說(shuō)明:除特殊說(shuō)明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒有評(píng)論)
主站蜘蛛池模板: 双峰县| 寿光市| 垦利县| 临泉县| 万宁市| 涟源市| 清流县| 衡水市| 台北县| 临沂市| 龙游县| 永登县| 临颍县| 麟游县| 大新县| 昭通市| 江永县| 蒲城县| 棋牌| 上饶市| 嘉峪关市| 集安市| 无为县| 巴林左旗| 花垣县| 文成县| 云和县| 临安市| 苗栗县| 谢通门县| 张家港市| 全南县| 凤山市| 泾川县| 社旗县| 泾阳县| 乐安县| 普兰县| 遂昌县| 普格县| 海淀区|