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

C語言make和Makefile介紹及使用

 更新時間:2022年01月07日 10:58:50   作者:^_^?小小碼nong  
這篇文章介紹了C語言make和Makefile以及使用方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1:make和Makefile的介紹:

概念

在軟件的工程中的源文件是不計其數(shù)的,其按照類型,功能,模塊分別放在若干個目錄中,哪些文件需要編譯,那些文件需要后編譯,那些文件需要重新編譯,甚至進行 更復(fù)雜的功能操作,這就引入了我們的系統(tǒng)編譯的工具:

在linux和unix中,有一個強大的使用程序,叫make,可以用它來管理多模塊程序的編譯和鏈接,直至生成可執(zhí)行文件

make使用程序讀取一個說明文件,稱為Makefile,Makefile文件中描述了整個軟件工程的 編譯規(guī)則和各個文件之間的依賴關(guān)系;

Makefile就像是一個Shell腳本一樣,其中可以執(zhí)行操作系統(tǒng)的命令,它帶來的好處就是我們能夠?qū)崿F(xiàn)“自動化編譯”,一旦寫好,只要一個make命令,整個軟件功能就完全自動編譯,極大的提高了軟件開發(fā)的效率;

make是一個命令工具,是一個解釋Makefile中指令的命令工具,一般來說大多數(shù)IDE都有這個命令

使用make可以是重新編譯的次數(shù)達到最小化;

2:make和Makefile

1:make的使用語法:

make使用語法:
? ? make [選項][目標(biāo)][宏定義]
? ? 選項列表:
? ? ? ? -d ?顯示調(diào)試信息(debug)
? ? ? ? -f<文件> 指定從那個文件中讀取以來關(guān)系,默認(rèn)文件是"Makefile"或者"makefile","-"表示從標(biāo)準(zhǔn)輸入(file)
? ? ? ? -h ?顯示所有選項的簡要說明(help)
? ? ? ? -n 不運行任何Makefile命令,只去現(xiàn)實它們(no)
? ? ? ? -s 安靜的方式運行,不顯示任何信息(silence)
? ? 可以使用-h來獲取更多的選項:

2:Makefile的編寫原則和規(guī)則

當(dāng)make命令不帶選項運行的時候,它從Makefile中讀取指定規(guī)則
當(dāng)制定規(guī)則不同與Makefile(makefile)的其他文件中時候,就要運行帶有-f選項的make命令。如make.fray.Makefile
make -f make.fray.Makefile

Makefile的編寫規(guī)則一:

目標(biāo)列表:關(guān)聯(lián)性列表
<TAB>命令列表

目標(biāo)列表:是用一個或者多個空格分開的目標(biāo)文件的清單

關(guān)聯(lián)性列表:同樣是一個或者多個空格分開的目標(biāo)文件,是目標(biāo)列表所以來的多個目標(biāo)文件的清單;

命令列表:用于創(chuàng)建目標(biāo)文件的將要執(zhí)行的命令清單,這個命令列表被換行符號分開,命令列表中的每個命令必須要以<TAB>字符開始;

如:##Sample
    power:power.c
        gcc -o power power.c

如:#Sample
    power:power.o demo.o
        gcc -o power power.o demo.o
    power.o:power.c
        gcc -o power.o -c power.c
    demo.o:demo.c
        gcc -o demo.o -c demo.c

注意:書寫的形式類似于倒推的形式

Makefile的編寫規(guī)則二:(不建議使用)

目標(biāo)列表:關(guān)聯(lián)性列表;命令列表
命令列表是一系列被分號隔開的命令,一個很長的命令行要續(xù)行的時候需要用一個反斜杠符號
如:all/mymath_test:src/mymath.c src/mymath_test.c; \
gcc -o all/mymath_test src/mymath.c  \  
src/mymath_test.c

注意:makefile書寫主要注意的是:

  • 1:編譯規(guī)則
  • 2:依賴關(guān)系
  • 3:倒推原理
  • 4:使用make命令去執(zhí)行
  • 5:如果已經(jīng)是最新的文件的時候,就不會再去編譯執(zhí)行了
  • 6:make去讀取makefile的時候,是按照依賴文件的順序去查找并且執(zhí)行命令的
  • 7:make在編譯的時候,如果發(fā)現(xiàn)被編譯的文件已經(jīng)是最新的了,就不會再去編譯(減少了編譯次數(shù))
  • 8:make文件是根據(jù)被編譯文件的時間戳去判斷文件是否是當(dāng)前最新的文件,如果是最新的,那么就會去重新編譯,如果不是最新的,就不會去進行編譯;
  • 9:千萬要注意makefile中編譯命令前面的分隔符

Makefile變量的使用

簡單變量:
    定義
        變量名字:=[文本]
        這類變量的實質(zhì)就是一組字符串
    添加
        變量名字+=[文本]或者 變量名字:=[文本][文本]
    引用變量
        $(變量名)
        $單字符變量(指的是但字符的變量 a:=123  $a)

        如:G:=gcc  一般我們都是定義成大寫的
            $G -o power power.c

內(nèi)置變量:
    $@   當(dāng)前目標(biāo)的名詞
    $?   比當(dāng)前目標(biāo)更新的已修改的依賴性列表
    $<   依賴性列表的第一個文件
    $^   用空格分開的所有依賴性列表

虛目標(biāo)

虛目標(biāo)是不存在的文件
虛目標(biāo)允許你去強制執(zhí)行某些事件,但這些事件在正常的規(guī)則中是不會發(fā)生的 
虛目標(biāo)不是真正的文件,make命令可以使用針對他們的任意規(guī)則
    虛目標(biāo)總是使與之有關(guān)的命令被執(zhí)行

all 生成工程中所有可以執(zhí)行者,通常是makefile的第一個生成目標(biāo)
test 運行程序的自動測試套件
clean 刪除make all生成的所有文件
install 在系統(tǒng)目錄中安裝工程項目生成的可執(zhí)行文件和文檔
uninstall 刪除make install安裝的所有文件

特殊目標(biāo)

make中有一些與定義的目標(biāo),這些預(yù)定義目標(biāo)被make以一種特殊的方式進行處理,這些目標(biāo)稱為特殊目標(biāo);
.DEFAULTS  如果make找不到生成目標(biāo)的任何makefile入口或后綴規(guī)則,就執(zhí)行與目標(biāo)相關(guān)的命令
.IGNORE  如果某一行makefile包含該目標(biāo),make忽略錯誤代碼并繼續(xù)建立,如果一個命令不正常存在,make自然會停止,帶有-i選項的make命令可以執(zhí)行相同的任務(wù)
.PHONY
    允許你指定一個不是文件的目標(biāo),所以您能只是make調(diào)用一系列makefile中的命令,即使在當(dāng)前目錄中有一個具有相同名字的文件
.SILENT
    make執(zhí)行這些命令,但是不顯示這些命令,帶有-s的make可以執(zhí)行相同的人物,
.SUFFIXES
    為目標(biāo)指定的前提(后綴)可以與后綴規(guī)則相互關(guān)聯(lián),如果與目標(biāo)沒有相關(guān)性的前提,以存在的后綴列表就會被刪除

默認(rèn)模式規(guī)則

make中有許多預(yù)定義的規(guī)則成為后綴規(guī)則,它可以讓make自動執(zhí)行許多任務(wù)
為了建立一個目標(biāo),make會遍歷一連串的依賴關(guān)系,這是為了決定從何處開始建立,如果沒有找到目標(biāo)文件,make就按有限順序查找源文件       

默認(rèn)模式規(guī)則:
    %o:%c
        $(CC) $(CFLAGS) -c $<
    $o:%s
        $(CC) $(AFLAGS) -o $@ $<

Makefile中的相關(guān)通配符:

#:注釋
\:連接符號
關(guān)聯(lián)列表和命令列表中可以使用shell通配符號? * %等

附上一個簡單的makefile

#Sample
CC:=gcc
CFLAGS:=-Iinclude
CFLAGS+=-c
TARGET:=all/mytest_test3
DEPEND:=obj/mymath.o 
DEPEND+=obj/mymath_test.o

$(TARGET):$(DEPEND)
    $(CC) -o $@ $^
#obj/mymath.o:src/mymath.c
#   $(CC) -o $@ $(CFLAGS) $^
#obj/mymath_test.o:src/mymath_test.c
#   $(CC) -o $@ $(CFLAGS) $^

#使用make中的默認(rèn)的模式規(guī)則
obj/%.o:src/%.c
    $(CC) -o $@ $(CFLAGS) $^ 



#聲明clean是一個虛目標(biāo)
.PHONY:clean
clean:
    rm -rf obj/mymath.o obj/mymath_test.o

到此這篇關(guān)于C語言make和Makefile介紹及使用的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • MFC控件大小隨窗體大小而改變

    MFC控件大小隨窗體大小而改變

    本文給大家分享的是使用VC++根據(jù)對話框大小調(diào)整控件大小的方法和示例代碼,有需要的小伙伴可以參考下。
    2015-06-06
  • 帶你了解C++的IO流

    帶你了解C++的IO流

    這篇文章主要介紹了C++ IO流的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下,希望能夠給你帶來幫助
    2021-09-09
  • C++結(jié)合QT實現(xiàn)帶有優(yōu)先級的計算器功能

    C++結(jié)合QT實現(xiàn)帶有優(yōu)先級的計算器功能

    這篇文章主要介紹了C++結(jié)合QT實現(xiàn)帶有優(yōu)先級的計算器,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • C語言實現(xiàn)通用數(shù)據(jù)結(jié)構(gòu)之通用椎棧

    C語言實現(xiàn)通用數(shù)據(jù)結(jié)構(gòu)之通用椎棧

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)通用數(shù)據(jù)結(jié)構(gòu)之通用椎棧,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 詳解C++編程中的私有繼承和公有繼承

    詳解C++編程中的私有繼承和公有繼承

    這篇文章主要介紹了詳解C++編程中的私有繼承和公有繼承,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • vs2019創(chuàng)建WebService服務(wù)的實現(xiàn)

    vs2019創(chuàng)建WebService服務(wù)的實現(xiàn)

    這篇文章主要介紹了vs2019創(chuàng)建WebService服務(wù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 利用Qt實現(xiàn)可擴展對話框的示例代碼

    利用Qt實現(xiàn)可擴展對話框的示例代碼

    可擴展對話框通常用于用戶對界面有不同要求的場合。當(dāng)供高級用戶使用或需要更多信息時,可通過某種方式的切換顯示完整對話窗體(擴展窗體)。本文將用Qt實現(xiàn)可擴展對話框,需要的可以參考一下
    2022-06-06
  • C++檢查某個文件或目錄是否存在的函數(shù)

    C++檢查某個文件或目錄是否存在的函數(shù)

    這篇文章主要介紹了C++檢查某個文件或目錄是否存在的函數(shù),是Windows應(yīng)用程序設(shè)計中非常常見的實用技巧,需要的朋友可以參考下
    2014-10-10
  • C++?容器?Vector?的使用方法

    C++?容器?Vector?的使用方法

    這篇文章主要介紹了C++?容器?Vector?的使用方法,Vector?是一個能夠存放任意類型的動態(tài)數(shù)組,有點類似數(shù)組,是一個連續(xù)地址空間,下文更多詳細內(nèi)容的介紹,需要的小伙伴可以參考一下
    2022-06-06
  • C++實現(xiàn)LeetCode(106.由中序和后序遍歷建立二叉樹)

    C++實現(xiàn)LeetCode(106.由中序和后序遍歷建立二叉樹)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(106.由中序和后序遍歷建立二叉樹),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07

最新評論

高唐县| 泰来县| 襄城县| 井陉县| 宜阳县| 辽阳县| 化德县| 廉江市| 阳西县| 略阳县| 北安市| 万载县| 禹州市| 阳朔县| 奎屯市| 凤凰县| 丘北县| 阳朔县| 乌拉特后旗| 鄂伦春自治旗| 平潭县| 尉氏县| 武乡县| 论坛| 佛坪县| 宜阳县| 美姑县| 迁安市| 梨树县| 兴山县| 保定市| 石狮市| 沐川县| 阿克| 广昌县| 南溪县| 厦门市| 如皋市| 尖扎县| 崇信县| 凤城市|