使用 Go 管理 Makefile

簡介

不少時候, 咱們須要運行多個命令來能完成一件事, 又或者某個命令須要指定不少參數.html

這個時候, 就須要使用腳原本取代這些複雜的命令, 減小輸錯命令的可能, 也能夠爲後來者指明經常使用的操做.node

Makefile

Makefile 就是爲此而生的, 相對於用途普遍的 shell 腳本, Makefile 專一於構建自動化過程, 一般用於編譯源碼等. 不少項目都會提供 Makefile 文件, 只須要簡單地運行 make 就能輕鬆完成編譯構建的過程.mysql

簡單介紹下 Makefile 的規則.linux

target: dependencies
    system command(s)
複製代碼

target 一般是程序要生成的目標文件的名字. 但也能夠是一個動做的名字.git

dependencies 是依賴, 一般是文件, 完成 target 所須要的輸入.github

system command(s) 是完成 target 所須要運行的指令, 即 shell 命令. 一條語句一行, 使用單個 tab 縮進.web

使用 make 命令能夠運行各類 target. 若是不帶 target 參數, 第一個 target 會被做爲默認目標.sql

不少時候, Makefile 不是爲了編譯, 也再也不引用任何文件, 僅僅是爲了整合多個命令, 比寫腳本方便多. 這個時候涉及到一個叫作僞目標的指令 .PHONY. .PHONY 後面跟着的多個 target 都不是要生成的文件的名字, 而是指代一個動做, 一個行爲. 好比 test 指運行測試, clean 清理文件等.docker

.PHONY: all test clean doc ci
複製代碼

更多內容能夠參考 跟我一塊兒寫 Makefileshell

實踐

注意, windows 下沒有 make 命令, 因此 Makefile 也就沒法使用.

你能夠在 docker 容器中運行命令, 能夠參考另外一篇文章 在 VS Code 中使用容器開發.

在項目的根目錄添加 Makefile 文件:

all: gotool build
build:
	@go build ./
run:
	@go run ./
clean:
	rm -f web
	find . -name "[._]*.s[a-w][a-z]" | xargs -i rm -f {}
gotool:
	go fmt ./
	go vet ./
ca:
	MSYS_NO_PATHCONV=1 openssl req -new -nodes -x509 -out conf/server.crt -keyout conf/server.key -days 3650 -subj "/C=CN/ST=SH/L=SH/O=CoolCat/OU=CoolCat Software/CN=127.0.0.1/emailAddress=coolcat@qq.com"
mysql:
	docker-compose up -d mysql
dbcli:
	docker-compose run --rm dbclient

help:
	@echo "make - 格式化 Go 代碼, 並編譯生成二進制文件"
	@echo "make build - 編譯 Go 代碼, 生成二進制文件"
	@echo "make run - 直接運行 Go 代碼"
	@echo "make clean - 移除二進制文件和 vim swap files"
	@echo "make gotool - 運行 Go 工具 'fmt' and 'vet'"
	@echo "make ca - 生成證書文件"
	@echo "make mysql - 啓動 mysql 服務器"
	@echo "make dbcli - 鏈接到 mysql 命令行"

.PHONY: all build run clean gotool ca mysql dbcli help
複製代碼

這裏的全部 target 都是僞目標.用來包裝一些簡單的 shell 命令.

能夠在項目根目錄下運行如下命令:

  • make - 格式化 Go 代碼, 並編譯生成二進制文件
  • make build - 編譯 Go 代碼, 生成二進制文件
  • make run - 直接運行 Go 代碼
  • make clean - 移除二進制文件和 vim swap files
  • make gotool - 運行 Go 工具 'fmt' and 'vet'
  • make ca - 生成證書文件
  • make mysql - 啓動 mysql 服務器
  • make dbcli - 鏈接到 mysql 命令行
  • make help - 查看幫助信息

有了 Makefile 的幫助, 不少事情變得簡單起來了, 好比要生成證書文件, 只須要運行 make ca 就好了, 不用輸入一大行命令了.

總結

Makefile 是 linux 下經常使用的工具, 對於提高效率是很是有效的.

當前部分的代碼

做爲版本 v0.11.0

相關文章
相關標籤/搜索