網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
1. go介紹
Go官方 提供一個(gè)名為go的命令,該命令可以用來(lái)下載go的依賴(lài),構(gòu)建安裝go應(yīng)用,運(yùn)行和測(cè)試 Go程序等等, 我們比較常用的比如go get, go mod, go run , go test等等。
但是,我們?cè)?Go 項(xiàng)目中為了簡(jiǎn)化使用 go 命令的復(fù)雜性,規(guī)范團(tuán)隊(duì)使用 go 命令的方式,提升個(gè)人或團(tuán)隊(duì)的生產(chǎn)力,我們會(huì)使用makefile腳本,使用make來(lái)處理一些任務(wù)。
2. make及makefile
makefile可以看作是make工具的腳本文件, 而make主要用來(lái)處理一系列命令。常用的比如用來(lái)編譯和打包文件, 在C/C++的編譯打包中應(yīng)用最廣泛了。
makefile文件結(jié)構(gòu)其實(shí)也比較簡(jiǎn)單:
target ... : prerequisites ... command ... ...
target
可以是一個(gè)object file(目標(biāo)文件),也可以是一個(gè)執(zhí)行文件,還可以是一個(gè)標(biāo)簽(label)。對(duì)于標(biāo)簽這種特性,在后續(xù)的“偽目標(biāo)”章節(jié)中會(huì)有敘述。
prerequisites
生成該target所依賴(lài)的文件和/或target
command
該target要執(zhí)行的命令(任意的shell命令)
makefile文件主要定義了執(zhí)行目標(biāo)應(yīng)用, 它依賴(lài)哪些文件或者目標(biāo), 以及當(dāng)前目標(biāo)需要執(zhí)行的command指令。有依賴(lài)項(xiàng),他會(huì)先去執(zhí)行依賴(lài)項(xiàng)的command。
具體的學(xué)習(xí)可以參考:makefile介紹 — 跟我一起寫(xiě)Makefile 1.0 文檔
3. 使用makefile編譯打包go應(yīng)用
這里我們使用makefile來(lái)簡(jiǎn)單實(shí)現(xiàn)一個(gè)將go應(yīng)用變異打包為不同系統(tǒng)的應(yī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平臺(tái) .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 ## 清理二進(jìn)制文件 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 代碼, 并編譯生成二進(jìn)制文件" @echo "make mac - 編譯 Go 代碼, 生成mac的二進(jìn)制文件" @echo "make linux - 編譯 Go 代碼, 生成linux二進(jìn)制文件" @echo "make win - 編譯 Go 代碼, 生成windows二進(jìn)制文件" @echo "make tidy - 執(zhí)行g(shù)o mod tidy" @echo "make run - 直接運(yùn)行 Go 代碼" @echo "make clean - 移除編譯的二進(jìn)制文件" @echo "make all - 編譯多平臺(tái)的二進(jìn)制文件"
4. 一些go項(xiàng)目的makefile參考 kratos微服務(wù)框架makefile
項(xiàng)目地址:kratos/Makefile at main · go-kratos/kratos · GitHub
kratos應(yīng)用使用makefile文件打包,它比我們示例多添加了go工具的環(huán)境配置部分,還有自動(dòng)生成使用gen工具編譯proto文件,我們可以根據(jù)實(shí)際項(xiàng)目需要添加。
iam身份識(shí)別系統(tǒng)使用makefile
項(xiàng)目地址:
iam項(xiàng)目使用makefile更多,它分為一個(gè)入口的makefile文件,同時(shí)它引入了項(xiàng)目scripts目錄下的多個(gè)功能的腳本,如下圖。 它將每個(gè)功能部分干的事情分拆到不同腳本文件,這樣更清晰。提供的功能也更清晰細(xì)致。
原文鏈接:https://blog.csdn.net/keenw/article/details/126052878
相關(guān)推薦
- 2023-02-17 Python去除字符串前后空格的三種方法匯總_python
- 2022-03-14 npm 依賴(lài)下載報(bào)錯(cuò) Hostname/IP does not match certificate‘
- 2022-10-05 Iptables防火墻基本匹配條件應(yīng)用詳解_安全相關(guān)
- 2022-09-18 Python中Parser的超詳細(xì)用法實(shí)例_python
- 2023-03-20 C#實(shí)現(xiàn)拷貝文件到另一個(gè)文件夾下_C#教程
- 2022-07-19 Python數(shù)據(jù)分析?Pandas?Series對(duì)象操作_python
- 2022-08-25 windows下搭建Consul集群_云其它
- 2023-01-03 Qt學(xué)習(xí)之容器類(lèi)的使用教程詳解_C 語(yǔ)言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支