首頁 > 軟體

go使用makefile指令碼編譯應用的方法小結

2022-08-01 14:01:48

1. go介紹

Go官方 提供一個名為go的命令,該命令可以用來下載go的依賴,構建安裝go應用,執行和測試 Go程式等等, 我們比較常用的比如go get, go mod, go run , go test等等。

但是,我們在 Go 專案中為了簡化使用 go 命令的複雜性,規範團隊使用 go 命令的方式,提升個人或團隊的生產力,我們會使用makefile指令碼,使用make來處理一些任務。

2. make及makefile

makefile可以看作是make工具的指令碼檔案, 而make主要用來處理一系列命令。常用的比如用來編譯和打包檔案, 在C/C++的編譯打包中應用最廣泛了。

makefile檔案結構其實也比較簡單:

target ... : prerequisites ...
    command
    ...
    ...

target

可以是一個object file(目標檔案),也可以是一個執行檔案,還可以是一個標籤(label)。對於標籤這種特性,在後續的“偽目標”章節中會有敘述。

prerequisites

生成該target所依賴的檔案和/或target

command

該target要執行的命令(任意的shell命令)

makefile檔案主要定義了執行目標應用, 它依賴哪些檔案或者目標, 以及當前目標需要執行的command指令。有依賴項,他會先去執行依賴項的command。

具體的學習可以參考:makefile介紹 — 跟我一起寫Makefile 1.0 檔案

3. 使用makefile編譯打包go應用

這裡我們使用makefile來簡單實現一個將go應用變異打包為不同系統的應用的範例:

.PHONY: all run clean help
 
APP = task
 
## linux: 編譯打包linux
.PHONY: linux
linux:
	CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build $(RACE) -o ./bin/${APP}-linux64 ./main.go
 
## win: 編譯打包win
.PHONY: win
win:
	CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build $(RACE) -o ./bin/${APP}-win64.exe ./main.go
 
## mac: 編譯打包mac
.PHONY: mac
mac:
	CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build $(RACE) -o ./bin/${APP}-darwin64 ./main.go
 
build:
	@go build -o ${APP}
 
## 編譯win,linux,mac平臺
.PHONY: all
all:win linux mac
 
run:
	@go run ./
 
.PHONY: tidy
tidy:
	@go mod tidy
 
## test: Run unit test.
.PHONY: test
test:
	@$(MAKE) go.test
 
## 清理二進位制檔案
clean:
	@if [ -f ./bin/${APP}-linux64 ] ; then rm ./bin/${APP}-linux64; fi
	@if [ -f ./bin/${APP}-win64.exe ] ; then rm ./bin/${APP}-win64.exe; fi
	@if [ -f ./bin/${APP}-darwin64 ] ; then rm ./bin/${APP}-darwin64; fi
 
help:
	@echo "make - 格式化 Go 程式碼, 並編譯生成二進位制檔案"
	@echo "make mac - 編譯 Go 程式碼, 生成mac的二進位制檔案"
	@echo "make linux - 編譯 Go 程式碼, 生成linux二進位制檔案"
	@echo "make win - 編譯 Go 程式碼, 生成windows二進位制檔案"
	@echo "make tidy - 執行go mod tidy"
	@echo "make run - 直接執行 Go 程式碼"
	@echo "make clean - 移除編譯的二進位制檔案"
	@echo "make all - 編譯多平臺的二進位制檔案"

4. 一些go專案的makefile參考 kratos微服務架構makefile

專案地址:kratos/Makefile at main · go-kratos/kratos · GitHub

kratos應用使用makefile檔案打包,它比我們範例多新增了go工具的環境設定部分,還有自動生成使用gen工具編譯proto檔案,我們可以根據實際專案需要新增。

iam身份識別系統使用makefile

專案地址:

iam專案使用makefile更多,它分為一個入口的makefile檔案,同時它引入了專案scripts目錄下的多個功能的指令碼,如下圖。 它將每個功能部分乾的事情分拆到不同指令碼檔案,這樣更清晰。提供的功能也更清晰細緻。

到此這篇關於go使用makefile指令碼編譯應用的文章就介紹到這了,更多相關gomakefile編譯應用內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com