国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Linux】Linux項目自動化構(gòu)建工具-make/makefile

這篇具有很好參考價值的文章主要介紹了【Linux】Linux項目自動化構(gòu)建工具-make/makefile。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

??博客主頁:小智_x0___0x_

??歡迎關(guān)注:??點贊??收藏??留言

??系列專欄:Linux入門到精通

??代碼倉庫:小智的代碼倉庫

什么是make/makefile?

  • 一個工程中的源文件不計數(shù),其按類型、功能、模塊分別放在若干個目錄中,makefile定義了一系列的規(guī)則來指定,哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至于進行更復(fù)雜的功能操作。
  • makefile帶來的好處就是——“自動化編譯”,一旦寫好,只需要一個make命令,整個工程完全自動編 譯,極大的提高了軟件開發(fā)的效率。
  • make是一個命令工具,是一個解釋makefile中指令的命令工具,一般來說,大多數(shù)的IDE都有這個命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make??梢?,makefile都成為了一種在工程方面的編譯方法。
  • make是一條命令,makefile是一個文件,兩個搭配使用,完成項目自動化構(gòu)建

make/makefile的使用

我們之前編譯程序要使用gcc/g++的各種指令來進行編譯>
比如我們建立一個mycode.c:
【Linux】Linux項目自動化構(gòu)建工具-make/makefile,Linux入門到精通,linux,自動化,運維
在沒有學(xué)習(xí)make/makefile之前我們想要編譯這段代碼需要使用這行指令gcc -o mycode mycode.c我們編譯來看:
【Linux】Linux項目自動化構(gòu)建工具-make/makefile,Linux入門到精通,linux,自動化,運維
可以看到程序可以被編譯執(zhí)行。
我們再來使用make/makefile來進行操作:

  1. 首先創(chuàng)建一個空白文件makefile/Makefile(首字母大小寫都可以):
    【Linux】Linux項目自動化構(gòu)建工具-make/makefile,Linux入門到精通,linux,自動化,運維
  2. 使用vim編輯器打開文件:
    【Linux】Linux項目自動化構(gòu)建工具-make/makefile,Linux入門到精通,linux,自動化,運維
    在文件中寫入這些代碼,保存并退出。
  3. 終端輸入make進行代碼編譯:
    【Linux】Linux項目自動化構(gòu)建工具-make/makefile,Linux入門到精通,linux,自動化,運維
    可以看到使用make指令,也可以對代碼進行編譯,也不用我們每次都去敲那么長的gcc指令,而且還很容易敲錯。
  4. 使用make clean對項目進行清理。
    【Linux】Linux項目自動化構(gòu)建工具-make/makefile,Linux入門到精通,linux,自動化,運維
    可以看到的確清理了我們生成的可執(zhí)行程序。

依賴關(guān)系

我們來看makefile中的內(nèi)容:
【Linux】Linux項目自動化構(gòu)建工具-make/makefile,Linux入門到精通,linux,自動化,運維
第一行就代表依賴關(guān)系,意思就是mycode的生成要依賴于mycode.c。
這里舉個例子:

小李到了月末給他自己的父親打了個電話要生活費。

小李為什么要給他父親打電話而不是給他室友的父親打電話要生活費呢,這是因為,小李和他父親是依賴關(guān)系,小李依賴于他的父親,而小李跟他室友的父親沒有任何關(guān)系。

依賴方法

【Linux】Linux項目自動化構(gòu)建工具-make/makefile,Linux入門到精通,linux,自動化,運維
這一行縮進的就代表依賴方法,意思是要執(zhí)行的指令。
再使用上面的例子進行解釋就是:
小李打電話提到的要生活費就是打電話的主要目的,而實行要生活費的這個操作就是依賴方法。

makefile是如何工作的?

【Linux】Linux項目自動化構(gòu)建工具-make/makefile,Linux入門到精通,linux,自動化,運維
我們把上篇學(xué)到的預(yù)處理編譯鏈接的過程也加到makefile中,再來使用make指令>
【Linux】Linux項目自動化構(gòu)建工具-make/makefile,Linux入門到精通,linux,自動化,運維
可以看到他也生成了對應(yīng)的文件,而且我們上面也沒有按照程序的執(zhí)行順序來寫,makefile也可以幫我們完成,這可以說明make會自動推導(dǎo)makefile中的依賴關(guān)系。
那如果我們再makefile中刪去一行指令那么程序還可以繼續(xù)正常執(zhí)行嗎?
我們來試試看>
【Linux】Linux項目自動化構(gòu)建工具-make/makefile,Linux入門到精通,linux,自動化,運維
可以看到給我們報錯說要產(chǎn)生mycode.o需要依賴mycode.s,而我們剛剛正好刪除了生成mycode.s文件的那兩行代碼

為什么要使用makefile呢?

使用Makefile的主要目的是為了自動化構(gòu)建和管理項目。Makefile是一個文本文件,其中包含了一系列規(guī)則和命令,用于告訴構(gòu)建工具如何編譯、鏈接和生成項目中的各個組件。

下面是使用Makefile的幾個重要原因:

  1. 自動化構(gòu)建:Makefile可以定義一系列構(gòu)建規(guī)則和依賴關(guān)系,使得整個項目的構(gòu)建過程變得自動化。通過運行make命令,構(gòu)建工具會根據(jù)Makefile中定義的規(guī)則判斷需要重新編譯哪些文件,并自動執(zhí)行相應(yīng)的編譯、鏈接操作,從而減少手動操作和避免人為錯誤。

  2. 管理復(fù)雜的項目:在大型項目中,可能涉及多個源文件、庫文件和配置文件之間的復(fù)雜依賴關(guān)系。Makefile可以讓您清晰地定義這些依賴關(guān)系,確保正確的文件被編譯和鏈接,以及正確的文件被重建。

  3. 跨平臺使用:Makefile是跨平臺的構(gòu)建工具,可以在不同的操作系統(tǒng)上使用。它支持各種編程語言和開發(fā)環(huán)境,使得項目在不同平臺上具有一致的構(gòu)建方式。

  4. 增量編譯:Makefile利用文件的時間戳來確定是否需要重新編譯某個文件。只有當文件的依賴發(fā)生變化或文件本身被修改時,相關(guān)的規(guī)則才會重新執(zhí)行。這種增量編譯的機制可以大幅提升項目的構(gòu)建效率,避免不必要的重復(fù)工作。

  5. 高度可定制:Makefile具有很高的靈活性和可定制性。您可以根據(jù)項目的需求定義自己的規(guī)則和命令,滿足特定的構(gòu)建和部署需求。您還可以輕松地擴展Makefile,添加新的目標、參數(shù)或規(guī)則,以適應(yīng)項目的變化。

綜上所述,使用Makefile可以提高項目的開發(fā)效率、降低出錯的可能性,簡化構(gòu)建過程并實現(xiàn)自動化管理,特別適用于較大、復(fù)雜的軟件項目。

makefile是怎么做到的呢?

我們再來使用make來編譯源代碼:
【Linux】Linux項目自動化構(gòu)建工具-make/makefile,Linux入門到精通,linux,自動化,運維
我們再在已經(jīng)編譯的基礎(chǔ)上再次使用make指令>
【Linux】Linux項目自動化構(gòu)建工具-make/makefile,Linux入門到精通,linux,自動化,運維
可以看到make拒絕的我的操作。這是因為生成的可執(zhí)行程序是最新的。
一定是源文件形成的可執(zhí)行,先有源文件,才有可執(zhí)行,一般而言,源文件的最近修改時間 比可執(zhí)行修改時間要老的!
如果我更改了源文件,歷史上曾經(jīng)還有可執(zhí)行程序,那么源文件的修改時間,一定是比可執(zhí)行程序要新的,這是我們再使用make就可以完成代碼的編譯。
因此只需要比較可執(zhí)行程序的修改時間 和 源文件的修改時間

  1. .exe 新于 .c 源文件是老的,不需要重新編譯
  2. .exe 老于 .c 源文件是新的,需要重新編譯

一般而言.exe!=.c 。
這里有一個stat指令可以查看文件所對應(yīng)的時間
【Linux】Linux項目自動化構(gòu)建工具-make/makefile,Linux入門到精通,linux,自動化,運維

  • Access(訪問):表示獲取或讀取數(shù)據(jù)或文件的操作。當您執(zhí)行訪問操作時,您可以查看或檢索數(shù)據(jù)的內(nèi)容或狀態(tài),而不會改變其原始內(nèi)容。例如,訪問一個文件可以讀取文件的內(nèi)容或元數(shù)據(jù),但不會對文件進行修改。

  • Modify(修改):表示對數(shù)據(jù)或文件進行更改的操作。當您執(zhí)行修改操作時,您會對數(shù)據(jù)或文件進行更改,以更新其內(nèi)容或狀態(tài)。這可能涉及編輯、添加、刪除等操作,以使數(shù)據(jù)或文件發(fā)生變化。例如,修改一個文本文件可以編輯文件的內(nèi)容并保存修改后的版本。

  • Change(變更):是一個更廣泛的術(shù)語,通常用于表示對數(shù)據(jù)或文件進行任何形式的更改。它可以包括訪問和修改以及其他操作。"Change"一詞沒有具體指明執(zhí)行了哪些操作,因此具體操作的含義可能需要根據(jù)上下文來確定。

make會根據(jù)源文件的新舊和目標文件的新舊(根據(jù)Modify時間進行比較),判定是否需要重新執(zhí)行依賴關(guān)系進行編譯。

make和make clean

【Linux】Linux項目自動化構(gòu)建工具-make/makefile,Linux入門到精通,linux,自動化,運維
為什么使用make可以直接執(zhí)行源文件編譯操作,而項目清理需要使用makefile呢?
我們來吧兩個順序顛倒一下試試看:
【Linux】Linux項目自動化構(gòu)建工具-make/makefile,Linux入門到精通,linux,自動化,運維
通過這個例子我們可以得出make指令的操作是執(zhí)行makefile中的第一個依賴關(guān)系。

.PHONY:偽目標

通過上面我們可以了解到依賴關(guān)系不一定總是執(zhí)行的,那如果我們想讓依賴關(guān)系總是執(zhí)行呢?
這里可以通過.PHONY:偽目標具體使用方法:
【Linux】Linux項目自動化構(gòu)建工具-make/makefile,Linux入門到精通,linux,自動化,運維
這就好比我們告訴makefile以后遇到mycode就不要阻攔了,讓他直接操作。
這個一般多用于修飾clean:

特殊符號

makefile中可以簡寫可以使用 $@ 代替要生成的目標文件,用 $^代表目標文件:
【Linux】Linux項目自動化構(gòu)建工具-make/makefile,Linux入門到精通,linux,自動化,運維
如果執(zhí)行make或者make clean之后不想看到指令回顯可以在指令前面加上@修飾:
【Linux】Linux項目自動化構(gòu)建工具-make/makefile,Linux入門到精通,linux,自動化,運維

??小結(jié)??

今天我們學(xué)習(xí)了Linux項目自動化構(gòu)建工具-make/makefile相信大家看完有一定的收獲。
種一棵樹的最好時間是十年前,其次是現(xiàn)在! 把握好當下,合理利用時間努力奮斗,相信大家一定會實現(xiàn)自己的目標!加油!創(chuàng)作不易,辛苦各位小伙伴們動動小手,三連一波????~~~,本文中也有不足之處,歡迎各位隨時私信點評指正!文章來源地址http://www.zghlxwxcb.cn/news/detail-524427.html

到了這里,關(guān)于【Linux】Linux項目自動化構(gòu)建工具-make/makefile的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【Linux】Linux項目自動化構(gòu)建工具-make/makefile

    【Linux】Linux項目自動化構(gòu)建工具-make/makefile

    ??博客主頁:小智_x0___0x_ ??歡迎關(guān)注:??點贊??收藏??留言 ??系列專欄:Linux入門到精通 ??代碼倉庫:小智的代碼倉庫 一個工程中的源文件不計數(shù),其按類型、功能、模塊分別放在若干個目錄中,makefile定義了一系列的規(guī)則來指定,哪些文件需要先編譯,哪些文件需

    2024年02月12日
    瀏覽(17)
  • 【Linux】項目自動化構(gòu)建工具——make/Makefile及拓展

    【Linux】項目自動化構(gòu)建工具——make/Makefile及拓展

    1、背景知識 一個工程中的源文件不計數(shù),其按類型、功能、模塊分別放在若干個目錄中,makefile定義了一系列的規(guī)則來指定,哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至于進行更復(fù)雜的功能操作 makefile帶來的好處就是——“自動化編譯”,一旦

    2023年04月27日
    瀏覽(23)
  • 【Linux】Linux下的項目自動化構(gòu)建工具——make和makefile

    【Linux】Linux下的項目自動化構(gòu)建工具——make和makefile

    ? ? ? ? 大家好,好久不見!今天小獅子為大家?guī)淼奈恼率且黄P(guān)于Linux下的項目自動化構(gòu)建工具——make和makefile的博客,希望能幫助到大家。 ? ? ? ? 當我們進行涉及多文件的工程開發(fā)時,我們需要對很多不同類型、不同功能,存在于不同目錄下的源文件進行編譯操作,

    2024年02月13日
    瀏覽(35)
  • Linux工具【2】(調(diào)試器gdb、項目自動化構(gòu)建工具make/Makefile)

    Linux工具【2】(調(diào)試器gdb、項目自動化構(gòu)建工具make/Makefile)

    在上一篇文章中介紹了Linux中的編輯器vim與編譯器gcc與g++: 戳我看vim與gcc詳解哦 在本篇文章中將繼續(xù)來介紹Linux中的工具: 調(diào)試器gdb與項目自動化構(gòu)建工具make/Makefile 在Windows環(huán)境中,我們使用vs時,常常會逐過程與逐語句地調(diào)試代碼以更高效地尋找到錯誤的位置。在Linux中也

    2024年02月12日
    瀏覽(24)
  • Linux項目自動化構(gòu)建工具-make/Makefile以及git三板斧

    Linux項目自動化構(gòu)建工具-make/Makefile以及git三板斧

    是否會寫make/makefile,從側(cè)面反映了一個程序員是否具備完成大型工程的能力。一個工程中的源文件不計數(shù),其按類型、功能、模塊分別放在若干個目錄中,makefile定義了一系列的規(guī)則來指定,哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至于進行更

    2024年02月16日
    瀏覽(27)
  • 【Linux】Linux編譯器-gcc/g++ && Linux項目自動化構(gòu)建工具-make/Makefile

    【Linux】Linux編譯器-gcc/g++ && Linux項目自動化構(gòu)建工具-make/Makefile

    目錄 Linux編譯器-gcc/g++使用 1.背景知識 ?Linux中頭文件的目錄在 Linux 庫 條件編譯的典型應(yīng)用 2.gcc如何完成 動態(tài)庫 vs 靜態(tài)庫 debug release Linux項目自動化構(gòu)建工具-make/Makefile 背景 用法 特殊符號? 預(yù)處理(去注釋,頭文件展開,條件編譯,宏替換) 編譯(生成匯編) 匯編(生成

    2024年02月20日
    瀏覽(33)
  • 【Linux】項目自動化構(gòu)建工具-make和Makefile 的使用和進度條的實現(xiàn)

    【Linux】項目自動化構(gòu)建工具-make和Makefile 的使用和進度條的實現(xiàn)

    什么是makefile 在我們以后的工作環(huán)境中,一個工程中的源文件不計數(shù),其按類型、功能、模塊分別放在若干個目錄中,makefile定義了一系列的規(guī)則來指定,哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至于進行更復(fù)雜的功能操作 Linux中提供了自動化

    2024年02月07日
    瀏覽(18)
  • 【Linux】:Linux項目自動化構(gòu)建工具——make/Makefile || Linux第一個小程序——進度條(簡單版本)

    【Linux】:Linux項目自動化構(gòu)建工具——make/Makefile || Linux第一個小程序——進度條(簡單版本)

    在本章開始給大家分享一個圖片 希望對你有幫助 在這里插入圖片描述 在開始本章之前 我們需要回顧一下上節(jié)課的函數(shù)的動靜態(tài)庫的優(yōu)缺點 動態(tài)庫的優(yōu)點: 比較節(jié)省資源(這里說的資源不僅僅是磁盤資源 也包括網(wǎng)絡(luò)資源 內(nèi)存資源等等),不會出現(xiàn)太多的重復(fù)代碼 缺點:對

    2024年02月05日
    瀏覽(39)
  • 【探索Linux】—— 強大的命令行工具 P.6(調(diào)試器-gdb、項目自動化構(gòu)建工具-make/Makefile)

    【探索Linux】—— 強大的命令行工具 P.6(調(diào)試器-gdb、項目自動化構(gòu)建工具-make/Makefile)

    前面我們講了C語言的基礎(chǔ)知識,也了解了一些數(shù)據(jù)結(jié)構(gòu),并且講了有關(guān)C++的一些知識,也學(xué)習(xí)了一些Linux的基本操作,也了解并學(xué)習(xí)了有關(guān)Linux開發(fā)工具vim 、gcc/g++ 使用、yum工具以及git 命令行提交代碼也相信大家都掌握的不錯,今天博主帶大家了解一下 —— Linux系統(tǒng)下的調(diào)試

    2024年02月12日
    瀏覽(26)
  • 【Linux】--- Linux編譯器-gcc/g++、調(diào)試器-gdb、項目自動化構(gòu)建工具-make/Makefile 使用

    【Linux】--- Linux編譯器-gcc/g++、調(diào)試器-gdb、項目自動化構(gòu)建工具-make/Makefile 使用

    格式: gcc [選項] 要編譯的文件 [選項] [目標文件] , gcc / g++ 安裝: sudo yum install -y gcc-c++ 。安裝后的編譯器默認的版本是較低的,我們可以 使用選項 -std=c99 (即使用c99標準), -std=c++11 (即使用c++11的標準)來進行版本提升 。使用 -o 選項,可以將編譯生成的可執(zhí)行重命名

    2024年03月10日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包