Golang Go语言分享一个makefile,请指教

发布于 1周前 作者 htzhanglong 来自 Go语言

Golang Go语言分享一个makefile,请指教

不是说多牛逼,也是从网上各种地方抄来的,就是自己写代码够用了,需要的可以参考,好的优化建议也提提,力求简单明了。

APP:=xxx
PACKAGE:=github.com/xxx/xxx

GO_VERSION:=$(shell go version)
BUILD_TIME:=$(shell date +%Y-%m-%dT%H:%M:%S%z)
COMMIT_HASH:=$(shell git rev-parse --short=8 HEAD || echo unknown)
GIT_BRANCH:=$(shell git rev-parse --abbrev-ref HEAD)
GIT_TAG:=$(shell git tag)

GO_LDFLAGS += -X '$(PACKAGE)/version.BUILD_TIME=$(BUILD_TIME)'
GO_LDFLAGS += -X '$(PACKAGE)/version.GO_VERSION=$(GO_VERSION)'
GO_LDFLAGS += -X '$(PACKAGE)/version.COMMIT_HASH=$(COMMIT_HASH)'
GO_LDFLAGS += -X '$(PACKAGE)/version.GIT_BRANCH=$(GIT_BRANCH)'
GO_LDFLAGS += -X '$(PACKAGE)/version.PROJECT_VERSION=$(GIT_TAG)'
GO_LDFLAGS += -s -w

.PHONY: default darwin linux clean check

default: linux ## Build the default binary file (default: linux)

check: ## Check working tree is clean or not
ifneq ($(shell git status -s),)
	$(error You must run git commit)
endif

linux: check ## Build the ELF binary file
	GOOS=linux GOARCH=amd64 CGO_ENABLE=0 go build -mod=readonly -ldflags "$(GO_LDFLAGS)" -o $(APP) .

darwin: check ## Build the Mach-O binary file
	GOOS=darwin GOARCH=amd64 CGO_ENABLE=0 go build -mod=readonly -ldflags "$(GO_LDFLAGS)" -o $(APP) .

clean: ## Remove previous build
	go clean

help: ## Display this help screen
	[@grep](/user/grep) -h -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'

更多关于Golang Go语言分享一个makefile,请指教的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

12 回复

用 markfile 调 shell 来搞 golang,俄罗斯套娃?

更多关于Golang Go语言分享一个makefile,请指教的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


没看明白和直接调 go 命令的区别

顺便解释一句作用,1.mac 上写代码,交叉编译成 elf 文件。2.将 git 的分支、commit id、tag、编译时间、go 版本信息编译到 elf 中。

感觉直接用 shell 脚本会不会更好

我还以为是真的 makefile,吓我一跳。

用脚本少打点字

这一看就是从 C/C++转过去的,和百度那个 BFE 一个路子

就是起个别名

撸点复杂的工作还可以,比如生成 grpc 的 pb 文件等等

GIT_TAG:=$(shell git tag)
这个能行吗。。

部门描述:

代码平台(代码托管、代码效能、代码智能)是阿里巴巴一站式智能研发协同平台的核心服务,对内为阿里几万产品研发相关人员提供工具支撑,对外是阿里云开发者生态关键一环。“Work Like Alibaba”将成为中国及至全世界开发者最潮流的口号。

本职位主要职责是负责代码平台基础设施的架构演进、Git 核心技术开发,代码领域技术趋势跟踪、下一代代码平台预言。我们是一群懂代码,爱 Git,有技术有梦想的工程师。让我们一起携手解决跨地域、分布式、海量代码托管等世界级业务和技术难题,为阿里巴巴集团内部、生态伙伴以及云上开发者服务。


我们的使命:帮助企业让更多的工作内容和工作行为 “有意义” 的数字化。
我们的愿景:服务一亿人的数字化办公。


岗位描述:
1、代码平台后端大规模服务器集群的分布式架构演进;
2、服务器计算、存储资源的再平衡、故障修复与隔离,服务器智能运维;
3、基于分布式存储的下一代代码平台,实现低延迟、高效率在线编码;
4、Git 核心代码开发,业界趋势跟踪,保持技术领先,优化用户体验等等。


岗位要求:
1、3 到 8 年的工作经验,精通 Go 语言、C 语言或 java 语言的一种。
2、熟悉分布式一致性协议,有分布式系统开发经验。
3、熟悉微服务架构,RPC 的基本原理、gRPC、pb 等原理和使用,加分。
4、热爱技术,有较强的学习能力、良好的团队合作能力、抗压能力。

你好!很高兴看到你对Go语言的Makefile感兴趣。Makefile在Go项目中主要用于自动化构建和部署任务,虽然Go的go buildgo test等命令已经非常强大,但Makefile仍然能提供额外的便利性和灵活性。以下是一个简单的Makefile示例,用于Go项目的基本构建和测试:

# 定义变量
GO_CMD=go
PROJECT_NAME=your_project_name
BUILD_DIR=./bin

# 构建项目
build:
    $(GO_CMD) build -o $(BUILD_DIR)/$(PROJECT_NAME) ./...

# 运行测试
test:
    $(GO_CMD) test -v ./...

# 清理构建文件
clean:
    rm -rf $(BUILD_DIR)/*

# 格式化代码
fmt:
    $(GO_CMD) fmt ./...

# 列出所有目标
.PHONY: help
help:
    @echo "Usage: make [target]"
    @echo "Targets:"
    @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\t\033[36m%-10s\033[0m %s\n", $$1, $$2}'

这个Makefile包含了构建、测试、清理和格式化代码的基本任务。你可以根据项目的具体需求进行扩展和修改。例如,可以添加交叉编译、Docker构建等任务。希望这个示例能帮到你,如果有任何进一步的问题或需要更详细的解释,请随时提问!

回到顶部