亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

??一、make和Makefile的作用

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

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

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

??二、make和Makefile的使用

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

在這里插入圖片描述

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

那么我們再創(chuàng)建一個Makefile文件(makefile也可以,但不建議)。

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

在這里插入圖片描述

然后我們保存退出。

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

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

在這里插入圖片描述

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

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

在這里插入圖片描述

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

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

在這里插入圖片描述

提示我們 make程序是最新的。 也就是說,如果你沒有修改或者更新程序的話。 那么則不會為你編譯,因為你程序都沒動呀,編譯它干嘛。

那么此時我們回過來分析一下 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)系和依賴方法?

打個比方。

月底了,你的生活費用光了。 這個時候你給你爸爸打電話,和他說:“爸,月底了。我沒錢了。"。此時你的爸爸就知道了,會給你打生活費。 這里面,你和你的父親是父子關(guān)系,所以你依賴于你的父親,你們之間有依賴關(guān)系。而你的父親給你生活費,這是你依賴父親的一種方式,所以這就是依賴方法。如果此時你給你室友的父親打電話要生活費,他會直接讓你滾。因為你們根本不構(gòu)成依賴關(guān)系,不構(gòu)成依賴關(guān)系就沒有依賴方法。

在這里插入圖片描述

所以我的程序也是一樣的。 make 是生成的可執(zhí)行程序。 而它依賴于make.c,因為它是從 make.c編譯來的。而依賴方法則是 執(zhí)行 gcc make.c -o make -std=c99 這條命令。

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

  • make會在當(dāng)前目錄下找名字叫“Makefile”或“makefile”的文件。
  • 如果找到,它會找文件中的第一個目標(biāo)文件(target),在上面的例子中,他會找到“hello”這個文件, 并把這個文件作為最終的目標(biāo)文件。
  • 如果hello文件不存在,或是hello所依賴的后面的test.o文件的文件修改時間要比test這個文件新(可 以用 touch 測試),那么,他就會執(zhí)行后面所定義的命令來生成test這個文件。
  • 如果test所依賴的test.o文件不存在,那么make會在當(dāng)前文件中找目標(biāo)為test.o文件的依賴性,如果 找到則再根據(jù)那一個規(guī)則生成test.o文件。(這有點像一個堆棧的過程)
  • 當(dāng)然,你的C文件和H文件是存在的啦,于是make會生成 test.o 文件,然后再用 test.o 文件聲明 make的終極任務(wù),也就是執(zhí)行文件test了。
  • 這就是整個make的依賴性,make會一層又一層地去找文件的依賴關(guān)系,直到最終編譯出第一個目標(biāo)文 件。
  • 在找尋的過程中,如果出現(xiàn)錯誤,比如最后被依賴的文件找不到,那么make就會直接退出,并報錯, 而對于所定義的命令的錯誤,或是編譯不成功,make根本不理。
  • make只管文件的依賴性,即,如果在我找了依賴關(guān)系之后,冒號后面的文件還是不在,那么對不起, 我就不工作啦。

清理

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

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

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

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

在這里插入圖片描述

我們在原有的基礎(chǔ)上加上了

.PHONY:clean

clean:

?	rm -f make 

那么.PHONY有什么作用呢?

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

那我們來試試吧這條指令

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

我們就可以看到它被多次執(zhí)行了。但我覺得沒有這個必要,因為文件沒有被修改的話。重新編譯沒有意義,所以自動化編譯不建議加上.PHONY

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

在這里插入圖片描述

我們就可以看到它被多次執(zhí)行了。但我覺得沒有這個必要,因為文件沒有被修改的話。重新編譯沒有意義,所以自動化編譯不建議加上.PHONY

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

相關(guān)文章

  • Linux下一個智能重啟Apache服務(wù)器的腳本分享

    Linux下一個智能重啟Apache服務(wù)器的腳本分享

    這篇文章主要介紹了Linux下一個智能重啟Apache服務(wù)器的腳本分享,當(dāng)檢測到腳本中所設(shè)定的服務(wù)器異常情況下便可執(zhí)行自動重啟,需要的朋友可以參考下
    2015-07-07
  • Java使用Apache.POI中HSSFWorkbook導(dǎo)出到Excel的實現(xiàn)方法

    Java使用Apache.POI中HSSFWorkbook導(dǎo)出到Excel的實現(xiàn)方法

    這篇文章主要介紹了Java使用Apache.POI中HSSFWorkbook導(dǎo)出到Excel的實現(xiàn)方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • linux抵御DDOS攻擊 通過iptables限制TCP連接和頻率

    linux抵御DDOS攻擊 通過iptables限制TCP連接和頻率

    這篇文章主要介紹了linux抵御DDOS攻擊 通過iptables限制TCP連接和頻率,需要的朋友可以參考下
    2016-05-05
  • linux下如何實現(xiàn)快速拷貝大文件

    linux下如何實現(xiàn)快速拷貝大文件

    這篇文章主要介紹了linux下如何實現(xiàn)快速拷貝大文件,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • 80端口被system占用導(dǎo)致Apache無法啟動的解決方法

    80端口被system占用導(dǎo)致Apache無法啟動的解決方法

    本文給大家介紹80端口被system占用導(dǎo)致Apache無法啟動的解決方法,非常不錯,一起看看吧
    2016-12-12
  • Linux解決RocketMQ中NameServer啟動問題的方法詳解

    Linux解決RocketMQ中NameServer啟動問題的方法詳解

    這篇文章主要為大家詳細介紹了Linux解決RocketMQ中NameServer啟動問題的方法,文中通過圖片和示例代碼進行了詳細講解,需要的小伙伴可以參考下
    2023-08-08
  • 如何配置Apache服務(wù)器中的虛擬機

    如何配置Apache服務(wù)器中的虛擬機

    Apache 的虛擬主機就是在一臺服務(wù)器上運行多個網(wǎng)站,每個虛擬主機都可以綁定獨立的域名,為這些域名可以指定單獨的目錄,訪問這些域名的時候,Apache 會打開對應(yīng)目錄里面的東西。本文給大家介紹Apache服務(wù)器虛擬機的配置方法,感興趣的朋友一起學(xué)習(xí)吧
    2016-04-04
  • Linux下SSH免密碼登錄配置詳解

    Linux下SSH免密碼登錄配置詳解

    這篇文章主要介紹了Linux下SSH免密碼登錄配置詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • linux如何查看nginx啟動路徑

    linux如何查看nginx啟動路徑

    這篇文章主要介紹了linux如何查看nginx啟動路徑問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 修改wamp的apache默認端口80為8088以及www目錄

    修改wamp的apache默認端口80為8088以及www目錄

    這篇文章主要介紹了修改wamp的apache默認端口80為8088以及www目錄為workphp,需要的朋友可以參考下
    2014-03-03

最新評論