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

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

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


1.make/Makefile的重要性

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

2.規(guī)則及使用

使用

我們先來看一下make/Makefile在Linux中的簡單使用(先看看豬跑,接著會解析規(guī)則):

第一步:我們先創(chuàng)建一個myfile.c文件,寫入簡單的內(nèi)容
【Linux】項目自動化構(gòu)建工具-make/Makefile
【Linux】項目自動化構(gòu)建工具-make/Makefile

第二步:創(chuàng)建一個Makefile文件,寫入符合Makefile規(guī)則的內(nèi)容
【Linux】項目自動化構(gòu)建工具-make/Makefile
【Linux】項目自動化構(gòu)建工具-make/Makefile

第三步:使用make命令,生成可執(zhí)行程序,使用make clean刪除可執(zhí)行程序
【Linux】項目自動化構(gòu)建工具-make/Makefile

規(guī)則

Makefile是一個圍繞依賴關系和依賴方法構(gòu)建的一個自動化編譯的工具。

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

1.依賴關系:在這個程序中,myfile可執(zhí)行程序和myfile.c文件構(gòu)成依賴關系,myfile.c的改變會影響myfile,所以myfile依賴于myfile.c。所以第一行就表示myfile可執(zhí)行程序的生成依賴于myfile.c文件。

2.依賴方法:myfile可執(zhí)行程序的生成依賴于myfile.c,gcc myfile.c -o myfile就是myfile文件依賴myfile.c的依賴方法。
(注意:完成一件事必須要有正確的依賴關系+正確的依賴方法。)

3.PHONY:被該關鍵字修飾的對象是一個偽目標,即該目標可以總是被執(zhí)行(不需要進行時間新舊的比較),即如果我們希望多次生成一樣的可執(zhí)行程序,就可以用這個關鍵字修飾對象,不過我們一般不這樣操作。大家肯定會有疑問:“???總是被執(zhí)行是什么意思?”

我們接下來以這個Makefile文件為例,myfile.c文件的內(nèi)容還是不變的。
【Linux】項目自動化構(gòu)建工具-make/Makefile
make原理:這段代碼,充分體現(xiàn)了依賴關系與依賴方法:make會在當前目錄下找名字為“Makefile”或“makefile”的文件,然后找到第一個依賴關系,myfile的生成依賴于myfile.o,myfile.o的生成依賴于myfile.s,myfile.s的生成依賴于myfile.i,myfile.i的生成依賴于myfile.c,然后gcc的內(nèi)容分別是它們的依賴方法。然后clean就是清理,當我們在命令行輸入make clean,就會執(zhí)行rm -f myfile myfile.i myfile.o myfile.s這句指令,就可以直接刪除這些文件了。這就是整個make的依賴性,make會一層又一層地去找文件的依賴關系,直到最終編譯出第一個目標文件。在找尋的過程中,如果出現(xiàn)錯誤,比如最后被依賴的文件找不到,那么make就會直接退出,并報錯,而對于所定義的命令的錯誤,或是編譯不成功,make根本不理。make只管文件的依賴性,即,如果在我找了依賴關系之后,冒號后面的文件還是不在,那么對不起,我就不工作啦。

項目清理:工程是需要被清理的。像clean這種,沒有被第一個目標文件直接或間接關聯(lián),那么它后面所定義的命令將不會被自動執(zhí)行,不過,我們可以顯示要make執(zhí)行。即命令——“make clean”,以此來清除所有的目標文件,以便重編譯。但是一般我們這種clean的目標文件,我們將它設置為偽目標,用 .PHONY 修飾,偽目標的特性是,總是被執(zhí)行的。

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

這段代碼第一次執(zhí)行make,可以正常執(zhí)行,然鵝,我們第二次在命令行輸入make,就無法再次被執(zhí)行了。然鵝,大家看上圖make clean被執(zhí)行一次生效之后,我們再執(zhí)行一次,還是可以生效。那么這就是.PHONY的作用,也就是“總是被執(zhí)行”的意思。如果大家希望make指令可以總是被執(zhí)行,那么就在開頭加上.PHONY。那么在不加.PHONY,gcc是怎么知道我們不需要再編譯了呢?

方法:如果我們make之后,又對源文件進行修改,則我們還可以再執(zhí)行make指令(即編譯器會判斷myfile.c的modify時間是否早于myfile可執(zhí)行程序,如果晚于myfile,則說明myfile.c文件發(fā)生修改,make可以繼續(xù)執(zhí)行,生成新的程序,覆蓋舊的程序)。

注意make是一條命令,makefile是一個文件(在當前源代碼的路徑下),兩個搭配使用,完成項目自動化構(gòu)建。make指令默認執(zhí)行Makefile文件中第一個依賴方法。如果你想運行指定的程序,就要顯示定義,例如上述的make clean。

例如我們將Makefile文件改成如下代碼并wq退出,在命令行輸入make指令,就會先執(zhí)行rm指令。
【Linux】項目自動化構(gòu)建工具-make/Makefile
【Linux】項目自動化構(gòu)建工具-make/Makefile

3.Makefile編譯多文件

當我們的工程中有多個源文件的時候,我們要如何進行編譯?
【Linux】項目自動化構(gòu)建工具-make/Makefile

【Linux】項目自動化構(gòu)建工具-make/Makefile
首先,我們可以直接使用gcc指令對多個源文件進行編譯,進而生成可執(zhí)行程序。注意用這種方式編譯文件,不需要加上頭文件,因為編譯器通過源文件的內(nèi)容可以直接知道所需頭文件的名字。
【Linux】項目自動化構(gòu)建工具-make/Makefile
但進行多文件編譯的時候,一般不直接用gcc生成可執(zhí)行程序,而是先用每個源文件生成各自的二進制文件,即.o文件,然后再將這些二進制文件通過鏈接生成可執(zhí)行程序。但是隨著源文件個數(shù)的增加,指令長度也會增長,所以我們就需要用到項目自動化構(gòu)建工具make/Makefile,這樣可以大大提高編譯運行的效率。

原因

  1. 如果直接使用源文件生成可執(zhí)行程序,那么若有一個.c文件發(fā)生了修改,我們再生成可執(zhí)行文件就需要將之前的所有源文件重新進行編譯鏈接。
  2. 如果每個源文件先生成自己的.o目標文件,那么一個源文件被修改,我們就只需要重新編譯該源文件的二進制文件,然后將所有二進制文件進行鏈接。這樣大大提高了程序編譯運行的效率。

步驟一: 在源文件所在目錄下創(chuàng)建一個名為Makefile/makefile的文件。
步驟二: 編寫Makefile文件。
【Linux】項目自動化構(gòu)建工具-make/Makefile
執(zhí)行結(jié)果
【Linux】項目自動化構(gòu)建工具-make/Makefile

補充:Makefile文件的快捷書寫方式

  1. $@:表示依賴關系中的目標文件(冒號左側(cè))。
  2. $^:表示依賴關系中的依賴文件列表(冒號右側(cè))。
  3. $<:表示依賴關系中的第一個依賴文件(冒號右側(cè)第一個)。

所以上述文件,還可以寫成:
【Linux】項目自動化構(gòu)建工具-make/Makefile文章來源地址http://www.zghlxwxcb.cn/news/detail-407748.html

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

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

領支付寶紅包贊助服務器費用

相關文章

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

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

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

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

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

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

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

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

    ? ? ? ? 大家好,好久不見!今天小獅子為大家?guī)淼奈恼率且黄P于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 庫 條件編譯的典型應用 2.gcc如何完成 動態(tài)庫 vs 靜態(tài)庫 debug release Linux項目自動化構(gòu)建工具-make/Makefile 背景 用法 特殊符號? 預處理(去注釋,頭文件展開,條件編譯,宏替換) 編譯(生成匯編) 匯編(生成

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

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

    什么是makefile 在我們以后的工作環(huán)境中,一個工程中的源文件不計數(shù),其按類型、功能、模塊分別放在若干個目錄中,makefile定義了一系列的規(guī)則來指定,哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至于進行更復雜的功能操作 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)絡資源 內(nèi)存資源等等),不會出現(xiàn)太多的重復代碼 缺點:對

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

    2024年02月12日
    瀏覽(25)
  • 【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)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包