成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一日一技:5分鐘掌握 Makefile

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

[[394191]]

在前幾天的文章:一日一技:為 Python 項目編寫 Makefile一文中,我們講到了 Makefile。這幾天不少同學在公眾號后臺留言,想進一步了解如何編寫 Makefile。于是,就有了今天這篇文章。

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

 

 

通過make命令,你可以快速運行一大段 Shell 命令,從而實現一鍵編譯代碼,一鍵格式化代碼等等功能。

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

我們來看一個實際例子。下圖為一段很簡單的 Golang 代碼:

 

代碼里面,有一些逗號后面沒有空格,結構體也寫得參差不齊。當我們要格式化一個.go文件的時候,一般是在當前文件夾下面執行命令:

  1. gofmt -w xxx.go 

運行以后,如下圖所示:

 

你為了執行這個命令,你需要敲15次鍵盤。而且如果你的項目里面有很多個.go文件,并且他們位于不同的文件夾里面,那么你還需要執行命令:

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

要敲的鍵盤就更多了。

這個時候,我們可以在項目根目錄創建一個Makefile文件,其內容如下:

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

如下圖所示:

 

于是,當我們在項目根目錄執行命令:make fmt的時候,整個項目里面的所有.go文件都會被自動格式化。

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用于執行命令make 名字,每一個名字下面可以跟很多條 Shell 命令。這里看起來有點像是 Python 的縮進。但需要特別注意的是,Makefile 的縮進只能使用 Tab 鍵,不能使用空格。

我們再來舉個例子,現在,我需要把項目編譯生成一個可執行文件,然后把這個可執行文件連同data.json一起復制到 一個叫做 output 的文件夾中。那么,我們的 Makefile 可以這樣寫:

  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

然后,當我們執行命令make build的時候,它下面的5行命令就一次性自動執行了。

再來一個例子,可能有一些程序開發完成以后,需要在本地 Docker 環境里面運行。但是如果已經有一個同名容器在運行了,我們必須先停止容器,刪除容器,然后才能重新運行。但是如果有了 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 還支持串聯多個名字下面的 shell 命令。例如,我想先格式化代碼,然后編譯成可執行文件,最后再使用 Docker 部署,那么,我們最終的 Makefile 文件如下圖所示:

 

此時,我只需要在項目根目錄中執行命令make,不帶任何參數,那么,fmt、build和deploy下面的所有 Shell 命令都會按順序依次執行。從而大大減少了我們的工作量。

可以說,無論是 Golang 項目還是 Python 還是其他項目,使用 Makefile 來自動化執行一些繁瑣重復的命令,是一個一勞永逸的事情。

本文轉載自微信公眾號「未聞Code」,可以通過以下二維碼關注。轉載本文請聯系未聞Code公眾號。

 

責任編輯:武曉燕 來源: 未聞Code
相關推薦

2021-04-12 21:19:01

PythonMakefile項目

2021-10-15 21:08:31

PandasExcel對象

2021-04-27 22:15:02

Selenium瀏覽器爬蟲

2025-05-28 03:15:00

Scrapy數據sleep

2021-05-13 09:01:51

Cloud Flare瀏覽器網站

2022-06-28 09:31:44

LinuxmacOS系統

2023-10-28 12:14:35

爬蟲JavaScriptObject

2021-09-13 20:38:47

Python鏈式調用

2024-11-13 09:18:09

2021-04-05 14:47:55

Python多線程事件監控

2021-03-12 21:19:15

Python鏈式調用

2022-03-12 20:38:14

網頁Python測試

2024-07-30 08:11:16

2024-07-30 08:16:18

Python代碼工具

2024-11-11 00:38:13

Mypy靜態類型

2024-05-24 09:07:06

JSONprint字符串

2021-07-27 21:32:57

Python 延遲調用

2021-10-03 20:08:29

HTTP2Scrapy

2021-05-08 19:33:51

移除字符零寬

2024-07-19 18:23:17

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 97久久久久久 | 成人性视频免费网站 | www.亚洲一区 | 黄色一级大片在线免费看产 | 国产精品美女久久久久久久网站 | 日韩av美女电影 | 日韩中文字幕 | 国产精品伦理一区 | 久久久亚洲 | 免费观看一级毛片 | 国产精品久久久久久久久久免费看 | 亚洲一区影院 | 国产黑丝av| 亚洲精品久久久久久久久久久久久 | 最新黄色毛片 | 久久成人av电影 | 久久国产一区二区三区 | 韩国精品在线观看 | 国产一级片av | 99久久日韩精品免费热麻豆美女 | 国产精品久久久久久久免费大片 | 久久久久久成人 | 亚洲欧美第一视频 | 久久久国产一区二区三区 | 高清视频一区二区三区 | 欧美精品日韩精品国产精品 | 国产激情自拍视频 | av中文在线| 9porny九色视频自拍 | 中文字幕欧美日韩一区 | 天天色天天色 | 国产一区2区 | 中文字幕 在线观看 | 亚洲精品综合 | 自拍偷拍亚洲一区 | 精品视频在线一区 | 日韩视频一级 | 一区二区三区在线免费观看 | 国产成人精品一区二 | 一本色道精品久久一区二区三区 | 一区二区三区四区在线视频 |