今天就跟大家聊聊有關(guān)怎么掌握Makefile的知識(shí),可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
創(chuàng)新互聯(lián)技術(shù)團(tuán)隊(duì)十載來致力于為客戶提供成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、品牌網(wǎng)站制作、全網(wǎng)整合營(yíng)銷推廣、搜索引擎SEO優(yōu)化等服務(wù)。經(jīng)過多年發(fā)展,公司擁有經(jīng)驗(yàn)豐富的技術(shù)團(tuán)隊(duì),先后服務(wù)、推廣了近千家網(wǎng)站,包括各類中小企業(yè)、企事單位、高校等機(jī)構(gòu)單位。
如果你現(xiàn)在使用 macOS 或者 Linux,那么你可以在終端輸入命令man make,查看make命令的幫助文檔,如下圖所示:
通過make命令,你可以快速運(yùn)行一大段 Shell 命令,從而實(shí)現(xiàn)一鍵編譯代碼,一鍵格式化代碼等等功能。
要學(xué)習(xí) Makefile,你需要有一個(gè)Linux 或者 macOS,然后需要知道兩個(gè)概念:make命令和Makefile文件。其中,Makefile文件是你自己寫的一個(gè)文本文件,它的名字叫做Makefile,不能修改大小寫,只能叫這個(gè)名字。而make是 macOS 和 Linux 中自帶的一個(gè)命令。當(dāng)我們執(zhí)行make命令的時(shí)候,它自動(dòng)讀取Makefile文件,從而決定自己要做什么事情。
我們來看一個(gè)實(shí)際例子。下圖為一段很簡(jiǎn)單的 Golang 代碼:
代碼里面,有一些逗號(hào)后面沒有空格,結(jié)構(gòu)體也寫得參差不齊。當(dāng)我們要格式化一個(gè).go文件的時(shí)候,一般是在當(dāng)前文件夾下面執(zhí)行命令:
gofmt -w xxx.go
運(yùn)行以后,如下圖所示:
你為了執(zhí)行這個(gè)命令,你需要敲15次鍵盤。而且如果你的項(xiàng)目里面有很多個(gè).go文件,并且他們位于不同的文件夾里面,那么你還需要執(zhí)行命令:
find . -name "*.go" | xargs gofmt -w
要敲的鍵盤就更多了。
這個(gè)時(shí)候,我們可以在項(xiàng)目根目錄創(chuàng)建一個(gè)Makefile文件,其內(nèi)容如下:
fmt: find . -name "*.go" | xargs gofmt -w
如下圖所示:
于是,當(dāng)我們?cè)陧?xiàng)目根目錄執(zhí)行命令:make fmt的時(shí)候,整個(gè)項(xiàng)目里面的所有.go文件都會(huì)被自動(dòng)格式化。
Makefile文件的格式如下:
名字1: shell 命令1 shell 命令2 shell 命令3 名字2: shell 命令4 shell 命令5 shell 命令6
其中,名字1 名字2用于執(zhí)行命令make 名字,每一個(gè)名字下面可以跟很多條 Shell 命令。這里看起來有點(diǎn)像是 Python 的縮進(jìn)。但需要特別注意的是,Makefile 的縮進(jìn)只能使用 Tab 鍵,不能使用空格。
我們?cè)賮砼e個(gè)例子,現(xiàn)在,我需要把項(xiàng)目編譯生成一個(gè)可執(zhí)行文件,然后把這個(gè)可執(zhí)行文件連同data.json一起復(fù)制到 一個(gè)叫做 output 的文件夾中。那么,我們的 Makefile 可以這樣寫:
fmt: gofmt -w *.go build: rm -rf output mkdir output go build -o JsonReader main.go mv JsonReader ./output/ cp data.json ./output/
然后,當(dāng)我們執(zhí)行命令make build的時(shí)候,它下面的5行命令就一次性自動(dòng)執(zhí)行了。
再來一個(gè)例子,可能有一些程序開發(fā)完成以后,需要在本地 Docker 環(huán)境里面運(yùn)行。但是如果已經(jīng)有一個(gè)同名容器在運(yùn)行了,我們必須先停止容器,刪除容器,然后才能重新運(yùn)行。但是如果有了 Makefile,這也就是一行命令的事情:
deploy: docker build -t xxx:latest docker stop json_reader docker rm json_reader docker run --name json_reader --network host -d xxx:latest
除此之外,Makefile 還支持串聯(lián)多個(gè)名字下面的 shell 命令。例如,我想先格式化代碼,然后編譯成可執(zhí)行文件,最后再使用 Docker 部署,那么,我們最終的 Makefile 文件如下圖所示:
此時(shí),我只需要在項(xiàng)目根目錄中執(zhí)行命令make,不帶任何參數(shù),那么,fmt、build和deploy下面的所有 Shell 命令都會(huì)按順序依次執(zhí)行。從而大大減少了我們的工作量。
可以說,無論是 Golang 項(xiàng)目還是 Python 還是其他項(xiàng)目,使用 Makefile 來自動(dòng)化執(zhí)行一些繁瑣重復(fù)的命令,是一個(gè)一勞永逸的事情。
看完上述內(nèi)容,你們對(duì)怎么掌握Makefile的知識(shí)有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。
當(dāng)前標(biāo)題:怎么掌握Makefile的知識(shí)
URL地址:http://aaarwkj.com/article10/iipodo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、自適應(yīng)網(wǎng)站、電子商務(wù)、搜索引擎優(yōu)化、建站公司、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)