当前位置:网站首页>go使用makefile脚本编译应用
go使用makefile脚本编译应用
2022-07-31 13:05:00 【CK持续成长】
目录
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目录下的多个功能的脚本,如下图。 它将每个功能部分干的事情分拆到不同脚本文件,这样更清晰。提供的功能也更清晰细致。
边栏推荐
猜你喜欢
随机推荐
查看Oracle数据库的用户名和密码
PyQt5 rapid development and actual combat 9.7 Automated testing of UI layer
The importance of strategic offensive capability is much higher than strategic defensive capability
关于我放弃考研这件事儿
ICML2022 | 面向自监督图表示学习的全粒度自语义传播
sqlalchemy 判断一个array 类型的字段是否和一个array有至少一个一致的数据
pytorch gpu版本安装最新
Istio微服务治理网格的全方面可视化监控(微服务架构展示、资源监控、流量监控、链路监控)
电商rpa是什么意思?跟电商rpi是一个意思吗?
手撕Verilog PWM呼吸灯
Grab the tail of gold, silver and silver, unlock the programmer interview "Artifact of Brushing Questions"
C#中+=的用法
聊聊 SAP 产品 UI 上的消息显示机制
C#控件StatusStrip使用
IDEA版Postman插件Restful Fast Request,细节到位,功能好用
golang-gin - graceful restart
Golang - gin - pprof - use and safety
基本语法(一)
CentOS7 安装MySQL 图文详细教程
ECCV2022: Recursion on Transformer without adding parameters and less computation!