最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux自動(dòng)化構(gòu)建工具make和Makefile詳解

 更新時(shí)間:2023年04月17日 09:08:18   作者:林 子  
這篇文章主要介紹了Linux如何自動(dòng)化構(gòu)建工具make和makefile,文章中有詳細(xì)的圖片示例,對(duì)學(xué)習(xí)有一定的參考價(jià)值,感興趣的小伙伴可以參考一下

??一、make和Makefile的作用

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

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

make是一個(gè)命令工具,是一個(gè)解釋makefile中指令的命令工具,一般來說,大多數(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)系和依賴方法之前,我們來寫一個(gè)C語言的小程序。

在這里插入圖片描述

我們創(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來查看當(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è)佥斎胍淮蝝ake試試。

在這里插入圖片描述

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

那么此時(shí)我們回過來分析一下 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í)候你給你爸爸打電話,和他說:“爸,月底了。我沒錢了。"。此時(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編譯來的。而依賴方法則是 執(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í)行后面所定義的命令來生成test這個(gè)文件。
  • 如果test所依賴的test.o文件不存在,那么make會(huì)在當(dāng)前文件中找目標(biāo)為test.o文件的依賴性,如果 找到則再根據(jù)那一個(gè)規(guī)則生成test.o文件。(這有點(diǎn)像一個(gè)堆棧的過程)
  • 當(dāng)然,你的C文件和H文件是存在的啦,于是make會(huì)生成 test.o 文件,然后再用 test.o 文件聲明 make的終極任務(wù),也就是執(zhí)行文件test了。
  • 這就是整個(gè)make的依賴性,make會(huì)一層又一層地去找文件的依賴關(guān)系,直到最終編譯出第一個(gè)目標(biāo)文 件。
  • 在找尋的過程中,如果出現(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í)又造成了問題。

那么我們有沒有方法解決呢?答案是當(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

那我們來試試吧這條指令

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

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

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

在這里插入圖片描述

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

以上就是Linux自動(dòng)化構(gòu)建工具make和Makefile詳解的詳細(xì)內(nèi)容,更多關(guān)于Linux自動(dòng)化構(gòu)建工具的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Squid集群做CDN全網(wǎng)加速配置分享

    Squid集群做CDN全網(wǎng)加速配置分享

    主服務(wù)器群,然后在利用Squid逆向緩存web80端口來加速自己的網(wǎng)站.各大門戶網(wǎng)站象163,sina,chinaitlab之類基本都是使用的這種技術(shù),好處是大大的有.比如加速了網(wǎng)絡(luò)和可以防黑客(因?yàn)樗麄円姷降亩际荂DN的主機(jī))
    2013-04-04
  • linux下判斷文件和目錄是否存在的方法(總結(jié))

    linux下判斷文件和目錄是否存在的方法(總結(jié))

    下面小編就為大家?guī)硪黄猯inux下判斷文件和目錄是否存在的方法(總結(jié))。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • Centos/Ubuntu下安裝nodejs教程

    Centos/Ubuntu下安裝nodejs教程

    本篇文章主要介紹了Centos/Ubuntu下安裝nodejs教程,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • linux中chmod命令用法詳解

    linux中chmod命令用法詳解

    在本篇文章里小編給大家分享了關(guān)于linux中chmod命令用法和相關(guān)知識(shí)點(diǎn),需要的朋友們跟著學(xué)習(xí)下。
    2019-04-04
  • Linux服務(wù)器被黑以后的詳細(xì)處理步驟

    Linux服務(wù)器被黑以后的詳細(xì)處理步驟

    作為一個(gè)Linux運(yùn)維工程師,能夠清晰地鑒別異常機(jī)器是否已經(jīng)被入侵了顯得至關(guān)重要,個(gè)人結(jié)合自己的工作經(jīng)歷,整理了幾種常見的機(jī)器被黑情況供參考
    2018-01-01
  • ubuntu環(huán)境下安裝memcache及啟動(dòng)的方法

    ubuntu環(huán)境下安裝memcache及啟動(dòng)的方法

    這篇文章主要介紹了ubuntu環(huán)境下安裝memcache及啟動(dòng)的方法,結(jié)合實(shí)例形式簡(jiǎn)單分析了ubuntu環(huán)境下memcache的安裝、啟動(dòng)及簡(jiǎn)單測(cè)試方法,需要的朋友可以參考下
    2018-03-03
  • Ubuntu設(shè)置國內(nèi)鏡像的全部流程

    Ubuntu設(shè)置國內(nèi)鏡像的全部流程

    Ubuntu作為廣泛使用的Linux發(fā)行版,其默認(rèn)的鏡像源可能因?yàn)榈乩砦恢煤途W(wǎng)絡(luò)問題導(dǎo)致下載速度緩慢,本文將指導(dǎo)用戶如何根據(jù)自己所在的地理位置,選擇并設(shè)置最適合的國內(nèi)鏡像源,需要的朋友可以參考下
    2024-06-06
  • CentOS下使用Squid架設(shè)CDN服務(wù)器的方法

    CentOS下使用Squid架設(shè)CDN服務(wù)器的方法

    這篇文章主要介紹了CentOS下使用Squid架設(shè)CDN服務(wù)器的方法,需要的朋友可以參考下
    2014-07-07
  • linux如何設(shè)置定時(shí)任務(wù)

    linux如何設(shè)置定時(shí)任務(wù)

    這篇文章主要介紹了linux如何設(shè)置定時(shí)任務(wù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Linux查看當(dāng)前登錄用戶并踢出用戶的命令

    Linux查看當(dāng)前登錄用戶并踢出用戶的命令

    這篇文章主要介紹了Linux查看當(dāng)前登錄用戶并踢出用戶的命令,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-05-05

最新評(píng)論

成都市| 航空| 德州市| 法库县| 铁岭县| 纳雍县| 宣威市| 华容县| 武平县| 静宁县| 大兴区| 黔南| 丰台区| 博客| 惠水县| 黔江区| 隆回县| 通许县| 开封县| 库尔勒市| 滨州市| 长沙市| 柳河县| 报价| 城口县| 元氏县| 神木县| 丹棱县| 锡林郭勒盟| 建昌县| 班玛县| 天全县| 新营市| 四会市| 页游| 克山县| 咸阳市| 彭水| 深圳市| 伽师县| 葫芦岛市|