在本章開(kāi)始給大家分享一個(gè)圖片 希望對(duì)你有幫助
在這里插入圖片描述
??前言
在開(kāi)始本章之前 我們需要回顧一下上節(jié)課的函數(shù)的動(dòng)靜態(tài)庫(kù)的優(yōu)缺點(diǎn)
動(dòng)態(tài)庫(kù)的優(yōu)點(diǎn): 比較節(jié)省資源(這里說(shuō)的資源不僅僅是磁盤(pán)資源 也包括網(wǎng)絡(luò)資源 內(nèi)存資源等等),不會(huì)出現(xiàn)太多的重復(fù)代碼
缺點(diǎn):對(duì)庫(kù)的依賴(lài)性較強(qiáng),一旦庫(kù)丟失 那么所有使用這個(gè)庫(kù)的程序就無(wú)法運(yùn)行,具體理解見(jiàn)上一篇Linux博客
靜態(tài)庫(kù)的優(yōu)點(diǎn):不依賴(lài)庫(kù),同類(lèi)型平臺(tái)中都可以直接使用
缺點(diǎn):可執(zhí)行程序體積比較大 浪費(fèi)資源
??1.Linux項(xiàng)目自動(dòng)化構(gòu)建工具——make/Makefile
??背景
會(huì)不會(huì)寫(xiě)makefile,從一個(gè)側(cè)面說(shuō)明了一個(gè)人是否具備完成大型工程的能力
一個(gè)工程中的源文件不計(jì)數(shù),其按類(lèi)型、功能、模塊分別放在若干個(gè)目錄中,makefile定義了一系列的規(guī)則來(lái)指定,哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至于進(jìn)行更復(fù)雜的功能操作
makefile帶來(lái)的好處就是——“自動(dòng)化編譯”,一旦寫(xiě)好,只需要一個(gè)make命令,整個(gè)工程完全自動(dòng)編譯,極大的提高了軟件開(kāi)發(fā)的效率
make是一個(gè)命令工具,是一個(gè)解釋makefile中指令的命令工具,一般來(lái)說(shuō),大多數(shù)的IDE都有這個(gè)命
令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make??梢?jiàn),makefile都成為了一
種在工程方面的編譯方法
make是一條命令,makefile是一個(gè)文件,兩個(gè)搭配使用,完成項(xiàng)目自動(dòng)化構(gòu)建
??理解
1.快速使用一下make/Makefile
2.解釋一下依賴(lài)關(guān)系和依賴(lài)方法
3.make/Makefile
1.
這里的mybin是目標(biāo)文件 mytest.c是依賴(lài)文件列表 下一行的空格是Tab鍵——語(yǔ)法要求
2.嘗試著按照你和你同學(xué) 你同學(xué)向你借一下作業(yè)給他抄 思考一下你為什么要給他抄 你應(yīng)該如何給他抄呢 你和他之間的依賴(lài)關(guān)系和依賴(lài)方法是什么
認(rèn)識(shí)一下時(shí)間:在Linux當(dāng)中 我們的文件的大小是由文件的內(nèi)容和屬性構(gòu)成的 那么我們的時(shí)間在Linux當(dāng)中也有Modify Change之分 當(dāng)我們對(duì)文件做出改動(dòng)時(shí) 我們此時(shí)就要注意一下Change是否變化了 并且Modify和Change是聯(lián)動(dòng)變化的
思考:mybin是否最新 如何知道m(xù)ybin最新?make/Makefile是如何知道可執(zhí)行程序是比較新的呢?
通過(guò)對(duì)比時(shí)間 可執(zhí)行程序的最近修改時(shí)間比所有源文件的最近修改時(shí)間新則是最新
這里有點(diǎn)錯(cuò)誤 應(yīng)該將mybin改成clean 這段代碼的意思是將clean這種目標(biāo)文件設(shè)置成偽目標(biāo) .PHONY意思是clean總是被執(zhí)行的
看下面這段代碼 需要結(jié)合我們學(xué)過(guò)的程序的編譯和預(yù)處理的知識(shí)
我們來(lái)對(duì)上述的make/Makefile的語(yǔ)法推導(dǎo)過(guò)程做一下解釋
.PHONY:clean
clean:
rm -f hello.i hello.s hello.o hello
??依賴(lài)關(guān)系
上面的文件 hello ,它依賴(lài) hello.o
hello.o , 它依賴(lài) hello.s
hello.s , 它依賴(lài) hello.i
hello.i , 它依賴(lài) hello.c
??依賴(lài)方法
gcc hello.* -option hello.* ,就是與之對(duì)應(yīng)的依賴(lài)關(guān)系
??原理
make是如何工作的,在默認(rèn)的方式下,也就是我們只輸入make命令。那么
??1. make會(huì)在當(dāng)前目錄下找名字叫“Makefile”或“makefile”的文件。
??2. 如果找到,它會(huì)找文件中的第一個(gè)目標(biāo)文件(target),在上面的例子中,他會(huì)找到“hello”這個(gè)文件,并把這個(gè)文件作為最終的目標(biāo)文件。
??3. 如果hello文件不存在,或是hello所依賴(lài)的后面的hello.o文件的文件修改時(shí)間要比hello這個(gè)文件新(可以用 touch 測(cè)試),那么,他就會(huì)執(zhí)行后面所定義的命令來(lái)生成hello這個(gè)文件。
??4. 如果hello所依賴(lài)的hello.o文件不存在,那么make會(huì)在當(dāng)前文件中找目標(biāo)為hello.o文件的依賴(lài)性,如果找到則再根據(jù)那一個(gè)規(guī)則生成hello.o文件。(這有點(diǎn)像一個(gè)堆棧的過(guò)程)
??5. 當(dāng)然,你的C文件和H文件是存在的啦,于是make會(huì)生成 hello.o 文件,然后再用 hello.o 文件聲明make的終極任務(wù),也就是執(zhí)行文件hello了
??6. 這就是整個(gè)make的依賴(lài)性,make會(huì)一層又一層地去找文件的依賴(lài)關(guān)系,直到最終編譯出第一個(gè)目標(biāo)文件
??7. 在找尋的過(guò)程中,如果出現(xiàn)錯(cuò)誤,比如最后被依賴(lài)的文件找不到,那么make就會(huì)直接退出,并報(bào)錯(cuò),而對(duì)于所定義的命令的錯(cuò)誤,或是編譯不成功,make根本不理
??8. make只管文件的依賴(lài)性,即,如果在我找了依賴(lài)關(guān)系之后,冒號(hào)后面的文件還是不在,那么對(duì)不起,我就不工作啦
??項(xiàng)目清理
工程是需要被清理的
像clean這種,沒(méi)有被第一個(gè)目標(biāo)文件直接或間接關(guān)聯(lián),那么它后面所定義的命令將不會(huì)被自動(dòng)執(zhí)行,不過(guò),我們可以顯示要make執(zhí)行。即命令——“make clean”,以此來(lái)清除所有的目標(biāo)文件,以便重編譯
但是一般我們這種clean的目標(biāo)文件,我們將它設(shè)置為偽目標(biāo),用 .PHONY 修飾,偽目標(biāo)的特性是,總是被執(zhí)行的。
可以將我們的 hello 目標(biāo)文件聲明成偽目標(biāo),測(cè)試一下
??2.Linux第一個(gè)小程序——進(jìn)度條
這里需要涉及到緩沖區(qū)的知識(shí) 由于我們現(xiàn)在的知識(shí)有限 等我們到了基礎(chǔ)IO部分我們會(huì)給大家詳細(xì)講解緩沖區(qū)的眾多細(xì)節(jié) 現(xiàn)在大家記住代碼是如何寫(xiě)的就行了
這里還需要了解一個(gè)知識(shí)點(diǎn)就是換行和回車(chē)的意思 這里的順序是不一樣的 先換行向下平移 然后再回車(chē)走到下一行的行首文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-745235.html
這就是我們的簡(jiǎn)單版本的進(jìn)度條 我們使用指令打印出來(lái)看一看
當(dāng)然這個(gè)也不是很完善的代碼 下一篇文章我們給大家呈現(xiàn)更完整的進(jìn)度條代碼 模擬實(shí)現(xiàn)進(jìn)度條在不同場(chǎng)景下的使用文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-745235.html
到了這里,關(guān)于【Linux】:Linux項(xiàng)目自動(dòng)化構(gòu)建工具——make/Makefile || Linux第一個(gè)小程序——進(jìn)度條(簡(jiǎn)單版本)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!