自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一日一技:5分鐘掌握 Makefile

系統(tǒng) Linux
要學(xué)習(xí) Makefile,你需要有一個(gè)Linux 或者 macOS,然后需要知道兩個(gè)概念:make命令和Makefile文件。其中,Makefile文件是你自己寫(xiě)的一個(gè)文本文件,它的名字叫做Makefile,不能修改大小寫(xiě),只能叫這個(gè)名字。而make是 macOS 和 Linux 中自帶的一個(gè)命令。

[[394191]]

在前幾天的文章:一日一技:為 Python 項(xiàng)目編寫(xiě) Makefile一文中,我們講到了 Makefile。這幾天不少同學(xué)在公眾號(hào)后臺(tái)留言,想進(jìn)一步了解如何編寫(xiě) Makefile。于是,就有了今天這篇文章。

如果你現(xiàn)在使用 macOS 或者 Linux,那么你可以在終端輸入命令man make,查看make命令的幫助文檔,如下圖所示:

 

 

通過(guò)make命令,你可以快速運(yùn)行一大段 Shell 命令,從而實(shí)現(xiàn)一鍵編譯代碼,一鍵格式化代碼等等功能。

要學(xué)習(xí) Makefile,你需要有一個(gè)Linux 或者 macOS,然后需要知道兩個(gè)概念:make命令和Makefile文件。其中,Makefile文件是你自己寫(xiě)的一個(gè)文本文件,它的名字叫做Makefile,不能修改大小寫(xiě),只能叫這個(gè)名字。而make是 macOS 和 Linux 中自帶的一個(gè)命令。當(dāng)我們執(zhí)行make命令的時(shí)候,它自動(dòng)讀取Makefile文件,從而決定自己要做什么事情。

我們來(lái)看一個(gè)實(shí)際例子。下圖為一段很簡(jiǎn)單的 Golang 代碼:

 

代碼里面,有一些逗號(hào)后面沒(méi)有空格,結(jié)構(gòu)體也寫(xiě)得參差不齊。當(dāng)我們要格式化一個(gè).go文件的時(shí)候,一般是在當(dāng)前文件夾下面執(zhí)行命令:

  1. gofmt -w xxx.go 

運(yùn)行以后,如下圖所示:

 

你為了執(zhí)行這個(gè)命令,你需要敲15次鍵盤(pán)。而且如果你的項(xiàng)目里面有很多個(gè).go文件,并且他們位于不同的文件夾里面,那么你還需要執(zhí)行命令:

  1. find . -name "*.go" | xargs gofmt -w 

要敲的鍵盤(pán)就更多了。

這個(gè)時(shí)候,我們可以在項(xiàng)目根目錄創(chuàng)建一個(gè)Makefile文件,其內(nèi)容如下:

  1. fmt: 
  2.  find . -name "*.go" | xargs gofmt -w 

如下圖所示:

 

于是,當(dāng)我們?cè)陧?xiàng)目根目錄執(zhí)行命令:make fmt的時(shí)候,整個(gè)項(xiàng)目里面的所有.go文件都會(huì)被自動(dòng)格式化。

Makefile文件的格式如下:

  1. 名字1: 
  2.  shell 命令1 
  3.  shell 命令2 
  4.  shell 命令3 
  5. 名字2: 
  6.  shell 命令4 
  7.  shell 命令5 
  8.  shell 命令6 

其中,名字1 名字2用于執(zhí)行命令make 名字,每一個(gè)名字下面可以跟很多條 Shell 命令。這里看起來(lái)有點(diǎn)像是 Python 的縮進(jìn)。但需要特別注意的是,Makefile 的縮進(jìn)只能使用 Tab 鍵,不能使用空格。

我們?cè)賮?lái)舉個(gè)例子,現(xiàn)在,我需要把項(xiàng)目編譯生成一個(gè)可執(zhí)行文件,然后把這個(gè)可執(zhí)行文件連同data.json一起復(fù)制到 一個(gè)叫做 output 的文件夾中。那么,我們的 Makefile 可以這樣寫(xiě):

  1. fmt: 
  2.  gofmt -w *.go 
  3.  
  4. build: 
  5.  rm -rf output 
  6.  mkdir output 
  7.  go build -o JsonReader main.go 
  8.  mv JsonReader ./output
  9.  cp data.json ./output

然后,當(dāng)我們執(zhí)行命令make build的時(shí)候,它下面的5行命令就一次性自動(dòng)執(zhí)行了。

再來(lái)一個(gè)例子,可能有一些程序開(kāi)發(fā)完成以后,需要在本地 Docker 環(huán)境里面運(yùn)行。但是如果已經(jīng)有一個(gè)同名容器在運(yùn)行了,我們必須先停止容器,刪除容器,然后才能重新運(yùn)行。但是如果有了 Makefile,這也就是一行命令的事情:

  1. deploy: 
  2.  docker build -t xxx:latest 
  3.  docker stop json_reader 
  4.  docker rm json_reader 
  5.  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í)行。從而大大減少了我們的工作量。

可以說(shuō),無(wú)論是 Golang 項(xiàng)目還是 Python 還是其他項(xiàng)目,使用 Makefile 來(lái)自動(dòng)化執(zhí)行一些繁瑣重復(fù)的命令,是一個(gè)一勞永逸的事情。

本文轉(zhuǎn)載自微信公眾號(hào)「未聞Code」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系未聞Code公眾號(hào)。

 

責(zé)任編輯:武曉燕 來(lái)源: 未聞Code
相關(guān)推薦

2021-04-12 21:19:01

PythonMakefile項(xiàng)目

2021-04-27 22:15:02

Selenium瀏覽器爬蟲(chóng)

2021-10-15 21:08:31

PandasExcel對(duì)象

2021-05-13 09:01:51

Cloud Flare瀏覽器網(wǎng)站

2023-10-28 12:14:35

爬蟲(chóng)JavaScriptObject

2021-03-12 21:19:15

Python鏈?zhǔn)?/a>調(diào)用

2021-04-05 14:47:55

Python多線程事件監(jiān)控

2024-11-13 09:18:09

2022-06-28 09:31:44

LinuxmacOS系統(tǒng)

2024-07-30 08:11:16

2024-07-30 08:16:18

Python代碼工具

2021-09-13 20:38:47

Python鏈?zhǔn)?/a>調(diào)用

2022-03-12 20:38:14

網(wǎng)頁(yè)Python測(cè)試

2024-07-19 18:23:17

2021-05-08 19:33:51

移除字符零寬

2024-11-11 00:38:13

Mypy靜態(tài)類型

2021-07-27 21:32:57

Python 延遲調(diào)用

2021-10-03 20:08:29

HTTP2Scrapy

2024-05-24 09:07:06

JSONprint字符串

2020-12-11 06:30:00

工具分組DataFrame
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)