一、關(guān)于make/makefile的背景知識
是否會寫make/makefile,從側(cè)面反映了一個程序員是否具備完成大型工程的能力。一個工程中的源文件不計數(shù),其按類型、功能、模塊分別放在若干個目錄中,makefile定義了一系列的規(guī)則來指定,哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至于進(jìn)行更復(fù)雜的功能操作。makefile帶來的好處就是——“自動化編譯”,一旦寫好,只需要一make命令,整個工程完全自動編譯,極大的提高了軟件開發(fā)的效率。
make是一個命令工具,是一個解釋makefile中指令的命令工具,一般來說,大多數(shù)的IDE都有這個命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make??梢?,makefile都成為了一種在工程方面的編譯方法。
make是一條命令,makefile是一個文件,兩個搭配使用,完成項目自動化構(gòu)建。
二、依賴關(guān)系和依賴方法
在使用make/makefile自動化構(gòu)建工具時,會存在兩個“依賴”,依賴關(guān)系和依賴方法。什么是依賴關(guān)系和依賴方法呢?比如說現(xiàn)在到月底了,你要問你爸要生活費(fèi)了,你打通電話,跟你爸說了一句,“爸,我是你兒子,我沒有生活費(fèi)了,你給我寄點(diǎn)生錢”,然后你就掛了電話,你說的這一句“爸,我是你兒子”就是表明你跟你爸之間的依賴關(guān)系,“你給我寄錢”就是依賴方法,正因為你是你爸的兒子,即你和你把有依賴關(guān)系,你爸才會給你錢,即依賴方法;如果沒有依賴關(guān)系,那么就沒辦法產(chǎn)生依賴方法。你不可能問你舍友的爸要錢,因為你們沒有依賴關(guān)系,不能產(chǎn)生依賴方法?;氐酱a上,依賴關(guān)系就是某一個文件的生成需要依賴另外一個或者多個文件為基礎(chǔ),這就是這些文件之間的依賴關(guān)系,依賴方法就是生成目標(biāo)文件的方法,即如何編譯才能生成目標(biāo)文件。
三、make/makefile如何書寫?
首先需要在當(dāng)前目錄下創(chuàng)建一個makefile/Makefile文件,按照編譯代碼的整個過程編譯就是分為:預(yù)處理,編譯,匯編,鏈接形成可執(zhí)行文件。
但是像上面那樣寫就寫得太復(fù)雜了,我們一般都是直接一步到位生成可執(zhí)行文件的。
因為一個文件的生成可能需要依賴多個文件,當(dāng)依賴的文件很多的時候,我們寫起來也很不方便,所以又產(chǎn)生了一種特殊符號的形式。
$@代表的是依賴關(guān)系中冒號的左邊, $^代表的是依賴關(guān)系中冒號的右邊。寫法如下:
四、文件的三個時間(Access、Modify、Change)
細(xì)心的朋友肯定發(fā)現(xiàn)了以下問題:
可以看到,當(dāng)我們寫好代碼之后,第一次make的時候是正常編譯,但是如果在沒有修改過代碼的情況下再make一次,編譯器就不讓我們編譯了,這是什么原因呢?
那我們就要來了解了解Access、Modify和Change三個時間了。
如果想要手動更新這三個時間,可以使用touch命令,touch+文件名的作用是,如果該文件不存在就是創(chuàng)建該文件,如果該文件已經(jīng)存在了,則會更新三個時間。
五、Linux下倒計時和進(jìn)度條代碼的書寫
5.1 回車換行
我們都聽到回車換行是一起講的,你是否覺得回車換行是一個詞呢?其實不是的,回車換行是兩個獨(dú)立的詞語,回車是回車,換行是換行,他們兩沒有半毛錢關(guān)系;回車的意思是回到本行的最開始的位置,換行是切換到下一行。在Linux下\r代表回車,\n其實是既有回車又有換行的。
5.2 緩沖區(qū)
觀察上述圖片你會發(fā)現(xiàn),main函數(shù)的代碼明明是先打印hello world?。?!,再sleep兩秒鐘的,但是根據(jù)圖片所示,卻是先sleep兩秒鐘,再打印出了hello world!?。〉?,這是什么原因呢?難道代碼還能從下往上執(zhí)行?當(dāng)然不是,不可能是先執(zhí)行下面的代碼,再執(zhí)行上面的代碼的,所以打印函數(shù)肯定先執(zhí)行了,但是卻沒有看見打印內(nèi)容到顯示屏,說明打印的代碼肯定在某個位置上存著,等到sleep后再在顯示屏上刷新出來,那么打印在了哪里呢?其實是在緩沖區(qū)里。
緩沖區(qū)是C語言維護(hù)的一段內(nèi)存,可以用來暫時存放打印的內(nèi)容,等到緩沖區(qū)滿了或者程序結(jié)束后會再刷新到顯示屏上去,為什么要有緩沖區(qū)臨時存儲呢?直接打印到顯示器上不就好了嗎?緩沖區(qū)當(dāng)然有它的意義,因為顯示器是計算機(jī)的外部設(shè)備,訪問速度慢,頻繁地向顯示器打印內(nèi)容不利于操作系統(tǒng)整機(jī)效率的提高,會降低操作系統(tǒng)的效率,緩沖區(qū)的存在能大大地減少訪問外設(shè)的頻率。
那么我們?nèi)绾文軌蛄⒓窗褍?nèi)容刷新到顯示器上呢?可以用fflush接口函數(shù)實時地把緩沖區(qū)上的內(nèi)容刷新到顯示器上。
如上圖所示,打印后用fflush接口刷新stdout(標(biāo)準(zhǔn)輸出:顯示器)
就能先看到打印的結(jié)果再sleep了。
5.3 倒計時代碼實現(xiàn)
5.4 進(jìn)度條代碼實現(xiàn)
makefile
processBar.h
processBar.c
test.c
運(yùn)行結(jié)果:
六、git三板斧
6.1 什么是git?
git是具有網(wǎng)絡(luò)功能的版本控制器,是一款開源的軟件。不知道你有沒有過這樣的經(jīng)歷,比如說你寫實驗報告,寫好了第一版本的實驗報告,提交的時候被老師罵了一頓,說到處都是問題,讓你拿回來重新修改;然后你拿回來修改了一遍,得到了第二版本的實驗報告;提交后老師說改正了一些問題,但是另外的問題又暴露出來了,讓你拿回去再修改;你修改了一遍,得到了第三版本的實驗報告;上交的時候,老師說你怎么越改越差了,再拿回去修改,你又改了一遍,拿給老師,老師板著臉罵了你一頓,然后說,算了,你的第二版本的實驗報告寫得還稍微好一點(diǎn),你把你的第二個版本的實驗報告交給我吧!這時回到宿舍的你看著第四版本的實驗報告,根本想不起來第二個版本是什么樣的了,因為你又沒有實現(xiàn)做好備份,所以你根本沒辦法恢復(fù)出第二版本的實驗報告交給老師。從這個例子就可以看出,當(dāng)我們在修改的時候,有可能需要對比不同版本時,最好是先做好每一次改動的痕跡,一遍找到舊的版本。而git就是用來干這個版本控制的活的。常見的版本控制器還有svn等。
git既可以做服務(wù)端,又可以做客戶端;客戶端就是我們在我們自己的電腦上下載了git這個軟件,然后在本地創(chuàng)建了一個目錄來做版本控制管理,這個目錄就叫做本地倉庫。由于本地的東西會出現(xiàn)丟失的情況,一旦丟失,那么就找不到了,所以git有一個內(nèi)存非常大的云服務(wù)器做服務(wù)器端,服務(wù)端也能夠做版本控制管理的,即你可以把你的本地倉庫的內(nèi)容推送給遠(yuǎn)端倉庫,自此,你就不怕因你的本地倉庫的內(nèi)容丟失而找不到你想要的版本了。這就是git的核心功能。
6.2 商業(yè)化版本的git網(wǎng)站
很多的互聯(lián)網(wǎng)公司就基于git做了一些商業(yè)化的網(wǎng)站,例如:gitee、github等等。就好比互聯(lián)網(wǎng)公司基于Linux內(nèi)核做了一些商業(yè)化的操作系統(tǒng)(OS)一樣,例如:Centos,烏班圖等等。
6.3 git多人協(xié)作
git除了可以做版本控制,還可以完成多人協(xié)作。假如在公司里做項目的時候,一般都是多人一起協(xié)作完成的,所以一個人寫的代碼,隊友們也是需要用的,我們可以通過上傳到git上,然后在各自的電腦上拉去下來就可以做到多人協(xié)作完成工作了。
6.3 git clone
git clone是把遠(yuǎn)端倉庫克隆到本地,使本地倉庫和遠(yuǎn)端倉庫建立聯(lián)系。
執(zhí)行完之后遠(yuǎn)端的倉庫就被clone到了本地:
完成了clone之后,進(jìn)入linux目錄,就會有一個.git的隱藏目錄文件,這個.git文件就是云服務(wù)器的本地倉庫。在gitee遠(yuǎn)端也有一個一模一樣的.git,本地倉庫如下圖:
遠(yuǎn)端倉庫和本地倉庫建立好聯(lián)系之后就可以通過git三板斧向倉庫里推送代碼了。
6.4 git三板斧之 – git add
git add + 文件名
該命令是將你的文件添加到暫存區(qū)里,具體操作為:
6.5 git三板斧之 – git commit
git commit -m “日志信息”
注意:-m選項必須要有,即日志信息一定要有的,如果不帶-m是無法提交到本地倉庫的。
該命令是真正地將文件提交到本地倉庫里,具體操作為:
6.6 git 三板斧之 – git push
git push
是把本地倉庫的代碼推送到遠(yuǎn)端倉庫。
具體操作為:
完成了git push之后在gitee上就能看到我們推送過去的代碼了,如下圖:包括日志信息等。
git首次使用需要配置用戶名和郵箱。文章來源:http://www.zghlxwxcb.cn/news/detail-574330.html
以上就是今天想要跟大家分享的內(nèi)容啦,你學(xué)會了嗎?如果這篇文章對你有所幫助,那么點(diǎn)點(diǎn)小心心,點(diǎn)點(diǎn)關(guān)注唄,后期還會持續(xù)更新Linux相關(guān)的知識哦,我們下期見啦?。。。?!文章來源地址http://www.zghlxwxcb.cn/news/detail-574330.html
到了這里,關(guān)于Linux項目自動化構(gòu)建工具-make/Makefile以及git三板斧的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!