真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

makefile(01)_初識-創(chuàng)新互聯(lián)

0. 聲明

本系列(makefile)文章,從零基礎(chǔ)開始,通過實驗逐步分析makefile的語法特性,并最終打造一個可復(fù)用、可移植的專業(yè)編譯環(huán)境。
參考:
1.DT 唐老師門徒計劃課程
2.GNU make 手冊:http://www.gnu.org/software/make/manual/make.html

成都創(chuàng)新互聯(lián)公司專注于陽東網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供陽東營銷型網(wǎng)站建設(shè),陽東網(wǎng)站制作、陽東網(wǎng)頁設(shè)計、陽東網(wǎng)站官網(wǎng)定制、小程序開發(fā)服務(wù),打造陽東網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供陽東網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

1.Make與makefile

  • Make是一個應(yīng)用程序:接續(xù)源程序之間的依賴關(guān)系,根據(jù)依賴關(guān)系自動維護編譯工作,執(zhí)行宿主操作系統(tǒng)中的各種命令。
  • Makefile是一個描述文件:定義了系列的規(guī)則來指定源文件編譯后的先后順序,擁有特定的語法規(guī)則,支持函數(shù)定義和函數(shù)調(diào)用,能夠直接集成操作系統(tǒng)的各種命令,本質(zhì)上也是一種腳本。
    兩者的聯(lián)系:
  • Makefile中的描述用于指導(dǎo)make程序如何完成工作;
  • make根據(jù)Makefile中的規(guī)則執(zhí)行命令,最后完成編譯輸出;
    簡單示例:
hello:                          // 目標(biāo)
    echo “hello makefile”       // 實現(xiàn)目標(biāo)要執(zhí)行的命令,注意行首是一個table(\t)

make -f mf.txt hello // -f表示指定mf.txt文件為規(guī)則定義文件(Makefile),并執(zhí)行文件里的hello目標(biāo)

make // 執(zhí)行默認(rèn)規(guī)則定義文件(Makefile/makefile)中的默認(rèn)目標(biāo)(第一個目標(biāo))

2.Makefile結(jié)構(gòu)

2.1.Makefile的意義:

Makefile 用于定義源文件和依賴關(guān)系,說明如何編譯各個源文件并生成可執(zhí)行文件
依賴的定義:

targets:prerequests; command1
    Command2

2.2.Makefile中的元素含義:

targets // 通常是需要生成的目標(biāo)文件名,make所需要執(zhí)行的命令名稱
prerequisite // 當(dāng)前目標(biāo)所依賴的其他目標(biāo)或文件
command // 完成目標(biāo)所需要的命令

2.3.注意事項:

  • 目標(biāo)和依賴可以有多個,使用空格分隔
  • 每一個命令行必須以【tab】字符開始,用于高速make程序(解析器),此行時一個命令行
  • 續(xù)行符: \ 可以將內(nèi)容分開寫到下一行,提高可讀性
  • Makefile中可以在命令前加上@符,作用為命令無回顯(Makefile默認(rèn)會打印執(zhí)行的每一個條命令)
    技巧:
    開發(fā)中可以將可執(zhí)行文件名和all 同時作為makefile中第一條規(guī)則的目標(biāo),這樣,當(dāng)執(zhí)行make命令并且目標(biāo)已經(jīng)存在時,將不會繼續(xù)執(zhí)行(除非依賴文件有更新)

    2.4.依賴規(guī)則:

    當(dāng)目標(biāo)對應(yīng)的文件不存在,執(zhí)行對應(yīng)命令
    當(dāng)依賴在時間上比目標(biāo)更新,執(zhí)行對應(yīng)命令
    當(dāng)依賴關(guān)系發(fā)生時,對比依賴鏈上每一個目標(biāo)

hello.out all : func.o main.o
    gcc -o hello.out func.o main.o

func.o : func.c
    gcc -o func.o -c func.c

main.o : main.c
    gcc -o main.o -c main.c

makefile(01)_初識

3.偽目標(biāo)的引入

3.1.Makefile中的目標(biāo)究竟是什么?

默認(rèn)情況下,make認(rèn)為目標(biāo)對應(yīng)著一個文件,make會比較文件和依賴關(guān)系的新舊關(guān)系,決定執(zhí)行是否執(zhí)行命令,make以文件處理作為第一優(yōu)先級。
所以當(dāng)出現(xiàn)和目標(biāo)同名的文件時,則在文件不被更新的前提下,目標(biāo)不會被執(zhí)行
makefile(01)_初識

3.2.Makefile中的偽目標(biāo)

通過PHONY關(guān)鍵字聲明一個偽目標(biāo),偽目標(biāo)不對應(yīng)任何實際的文件,不管偽目標(biāo)的依賴時否更新,命令總是執(zhí)行。
偽目標(biāo)的語法:先聲明,后使用
本質(zhì):偽目標(biāo)是make中特殊的目標(biāo):.PHONY的依賴

.PHONY : clean

clean :
    rm *.o hello.out -rf

3.3.偽目標(biāo)的妙用:

規(guī)則調(diào)用,模擬C語言函數(shù)的概念。
原理:當(dāng)一個目標(biāo)的依賴包含偽目標(biāo)時,偽目標(biāo)所定義的命令總是會被執(zhí)行。

.PHONY : rebuild clean all

rebuild : clean all

all : hello.out

clean :
    rm *.o hello.out  -rf

3.4.繞開.PHONY關(guān)鍵字定義偽目標(biāo)

原理:如果一個規(guī)則沒有命令或者依賴,并且他的目標(biāo)不是一個存在的文件名,在執(zhí)行此規(guī)則是,目標(biāo)總會被認(rèn)為是最新的。

clean : FORCE
    rm *.o hello.out -rf 
FORCE :

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


網(wǎng)站名稱:makefile(01)_初識-創(chuàng)新互聯(lián)
標(biāo)題鏈接:http://weahome.cn/article/dsocds.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部