go使用makefile腳本編譯應用的方法小結
1. go介紹
Go官方 提供一個名為go的命令,該命令可以用來下載go的依賴,構建安裝go應用,運行和測試 Go程序等等, 我們比較常用的比如go get, go mod, go run , go test等等。
但是,我們在 Go 項目中為了簡化使用 go 命令的復雜性,規(guī)范團隊使用 go 命令的方式,提升個人或團隊的生產(chǎn)力,我們會使用makefile腳本,使用make來處理一些任務。
2. make及makefile
makefile可以看作是make工具的腳本文件, 而make主要用來處理一系列命令。常用的比如用來編譯和打包文件, 在C/C++的編譯打包中應用最廣泛了。
makefile文件結構其實也比較簡單:
target ... : prerequisites ...
command
...
...target
可以是一個object file(目標文件),也可以是一個執(zhí)行文件,還可以是一個標簽(label)。對于標簽這種特性,在后續(xù)的“偽目標”章節(jié)中會有敘述。
prerequisites
生成該target所依賴的文件和/或target
command
該target要執(zhí)行的命令(任意的shell命令)
makefile文件主要定義了執(zhí)行目標應用, 它依賴哪些文件或者目標, 以及當前目標需要執(zhí)行的command指令。有依賴項,他會先去執(zhí)行依賴項的command。
具體的學習可以參考:makefile介紹 — 跟我一起寫Makefile 1.0 文檔
3. 使用makefile編譯打包go應用
這里我們使用makefile來簡單實現(xiàn)一個將go應用變異打包為不同系統(tǒng)的應用的示例:
.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 - 執(zhí)行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工具的環(huán)境配置部分,還有自動生成使用gen工具編譯proto文件,我們可以根據(jù)實際項目需要添加。
iam身份識別系統(tǒng)使用makefile
項目地址:
iam項目使用makefile更多,它分為一個入口的makefile文件,同時它引入了項目scripts目錄下的多個功能的腳本,如下圖。 它將每個功能部分干的事情分拆到不同腳本文件,這樣更清晰。提供的功能也更清晰細致。

到此這篇關于go使用makefile腳本編譯應用的文章就介紹到這了,更多相關gomakefile編譯應用內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
golang?gorm框架數(shù)據(jù)庫的連接操作示例
這篇文章主要為大家介紹了golang?gorm框架數(shù)據(jù)庫操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪2022-04-04
Go結合JavaScript實現(xiàn)抓取網(wǎng)頁中的圖像鏈接
這篇文章主要為大家詳細介紹了Go語言如何結合JavaScript實現(xiàn)抓取網(wǎng)頁中的圖像鏈接,文中的示例代碼講解詳細,有需要的小伙伴可以跟隨小編一起學習一下2023-11-11

