golang现代化构建工具插件库mmake的使用

Golang现代化构建工具插件库mmake的使用

关于mmake

Mmake是一个小型程序,它包装了make以提供额外功能,例如用户友好的帮助输出、远程包含等。除此之外,它的行为与标准make相同。

安装

通过gobinaries.com安装

$ curl -sf https://gobinaries.com/tj/mmake/cmd/mmake | sudo sh

从源码构建

$ go get github.com/tj/mmake/cmd/mmake

Homebrew安装

$ brew tap tj/mmake https://github.com/tj/mmake.git
$ brew install tj/mmake/mmake

添加别名

在你的配置文件中添加以下别名:

alias make=mmake

主要功能

帮助输出

虽然make的主要功能不是作为"任务运行器",但由于其普遍性,它经常被用于这种场景。然而,make缺乏显示帮助信息的内置机制。

示例Makefile:

# Start the dev server.
#
# Note that the API server must
# also be running.
start:
	@gopherjs -m -v serve --http :3000 github.com/tj/docs/client
.PHONY: start

# Start the API server.
api:
	@go run server/cmd/api/api.go
.PHONY: api

# Display dependency graph.
deps:
	@godepgraph github.com/tj/docs/client | dot -Tsvg | browser
.PHONY: deps

# Display size of dependencies.
#- Any comment preceded by a dash is omitted.
size:
	@gopherjs build client/*.go -m -o /tmp/out.js
	@du -h /tmp/out.js
	@gopher-count /tmp/out.js | sort -nr
.PHONY: size

Mmake提供了一个help命令来显示所有目标的简短注释:

$ alias make=mmake
$ make help

  start      Start the dev server.
  api        Start the API server.
  deps       Display dependency graph.
  size       Display size of dependencies.

你可以选择性地过滤要查看帮助的命令(支持标准Unix glob模式):

$ make help start

  start   Start the dev server.

$ make help s*

  size    Display size of dependencies.
  start   Start the dev server.

help命令还支持使用详细标志(-v/--verbose)显示更长的输出:

$ make help -v start

  Start the dev server.

  Note that the API server must
  also be running.
$ make help -v

  start:
    Start the dev server.

    Note that the API server must
    also be running.

  api:    
    Start the API server.

  deps:       
    Display dependency graph.

  size:
    Display size of dependencies.

make的默认行为当然保留:

$ make
serving at http://localhost:3000 and on port 3000 of any available addresses

$ make size
...

远程包含

包含可以指定URL(http、https或github快捷方式)进行包含,这些URL会自动下载到/usr/local/include并可供make使用。注意,make默认会解析此目录中的包含,因此Makefile对于常规用户仍然有效。

包含是递归解析的。例如,你可能有一组标准包含供你的团队运行测试、lint和部署:

include github.com/apex/make/deploy
include github.com/apex/make/lint
include github.com/apex/make/test
include https://github.com/apex/make/test/Makefile
include https://github.com/apex/make/test/make.mk

这可能很难记住,所以你也可以提供一个包含其他文件的文件:

include github.com/apex/make/all

如果给定的存储库包含一个index.mk文件,你可以只声明:

include github.com/apex/make

或者可能每个开发环境一个,如Node或Golang:

include github.com/apex/make/node
include github.com/apex/make/golang

如果你担心任意代码执行,那么只需fork一个项目并保持对其的控制。

更新

一旦远程包含被下载到/usr/local/includemmake将不会尝试再次获取它们。为了获取远程包含的更新副本,mmake提供了一个update目标,它将再次下载它们:

$ make update

注册表

如果你想查找或分享makefile,请查看Wiki,如果缺少类别,请随意添加一个。

链接

  • GNU Make文档
  • Wiki注册表
  • 公告博客文章
  • 介绍YouTube视频
  • AUR包Arch Linux包

徽章

GoDoc GoDoc

MIT License

Status

APEX


更多关于golang现代化构建工具插件库mmake的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang现代化构建工具插件库mmake的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Golang现代化构建工具插件库mmake的使用指南

mmake是一个现代化的Golang构建工具插件库,它基于Makefile但提供了更简单、更模块化的方式来管理Golang项目的构建流程。以下是mmake的详细介绍和使用示例。

mmake的核心特点

  1. 模块化设计:将构建任务分解为可重用的模块
  2. 简化语法:比传统Makefile更简洁的语法
  3. Golang友好:专门为Golang项目优化
  4. 跨平台支持:在Linux、macOS和Windows上都能工作
  5. 依赖管理:内置依赖管理功能

安装mmake

# 使用go install安装
go install github.com/tj/mmake/cmd/mmake@latest

# 或者使用brew(macOS)
brew install mmake

基本使用示例

1. 创建基础mmakefile

创建一个名为mmakefile的文件:

include $(GOPATH)/src/github.com/tj/mmake/base.mmake

BINARY := myapp
VERSION := 0.1.0

.PHONY: build
build: ## Build the binary
	@echo "Building $(BINARY) v$(VERSION)"
	@go build -o $(BINARY) ./cmd/$(BINARY)

2. 运行构建

mmake build

常用功能示例

多平台交叉编译

include $(GOPATH)/src/github.com/tj/mmake/base.mmake

BINARY := myapp
VERSION := 0.1.0

.PHONY: build
build: ## Build for current platform
	@go build -o $(BINARY) ./cmd/$(BINARY)

.PHONY: release
release: ## Build release binaries for all platforms
	@echo "Building release binaries for v$(VERSION)"
	@GOOS=linux GOARCH=amd64 go build -o bin/$(BINARY)-linux-amd64 ./cmd/$(BINARY)
	@GOOS=darwin GOARCH=amd64 go build -o bin/$(BINARY)-darwin-amd64 ./cmd/$(BINARY)
	@GOOS=windows GOARCH=amd64 go build -o bin/$(BINARY)-windows-amd64.exe ./cmd/$(BINARY)

测试和覆盖率

.PHONY: test
test: ## Run tests
	@go test -v ./...

.PHONY: cover
cover: ## Run tests with coverage
	@go test -coverprofile=coverage.out ./...
	@go tool cover -html=coverage.out -o coverage.html

代码质量检查

.PHONY: lint
lint: ## Run linters
	@golangci-lint run ./...

依赖管理

.PHONY: deps
deps: ## Install dependencies
	@go mod download
	@go mod tidy

Docker构建

.PHONY: docker
docker: ## Build docker image
	@docker build -t $(BINARY):$(VERSION) .

高级功能

1. 使用插件

mmake支持插件系统,可以轻松扩展功能。例如使用mmake-goreleaser插件:

include $(GOPATH)/src/github.com/tj/mmake/base.mmake
include $(GOPATH)/src/github.com/tj/mmake-goreleaser/goreleaser.mmake

BINARY := myapp
VERSION := 0.1.0

.PHONY: release
release: goreleaser ## Build and release using goreleaser

2. 条件执行

.PHONY: deploy
deploy: ## Deploy based on environment
ifeq ($(ENV),production)
	@echo "Deploying to production"
	@kubectl apply -f k8s/production
else
	@echo "Deploying to staging"
	@kubectl apply -f k8s/staging
endif

3. 自动文档生成

mmake可以自动为你的构建任务生成文档:

mmake help

这会显示所有带有##注释的任务及其描述。

实际项目示例

以下是一个完整的mmakefile示例:

include $(GOPATH)/src/github.com/tj/mmake/base.mmake

BINARY := myapp
VERSION := 0.1.0
DOCKER_REPO := myorg

.PHONY: build
build: deps ## Build the binary
	@echo "Building $(BINARY) v$(VERSION)"
	@go build -o $(BINARY) ./cmd/$(BINARY)

.PHONY: test
test: deps ## Run tests
	@go test -v ./...

.PHONY: cover
cover: deps ## Run tests with coverage
	@go test -coverprofile=coverage.out ./...
	@go tool cover -html=coverage.out -o coverage.html

.PHONY: lint
lint: ## Run linters
	@golangci-lint run ./...

.PHONY: deps
deps: ## Install dependencies
	@go mod download
	@go mod tidy

.PHONY: docker
docker: ## Build docker image
	@docker build -t $(DOCKER_REPO)/$(BINARY):$(VERSION) .
	@docker tag $(DOCKER_REPO)/$(BINARY):$(VERSION) $(DOCKER_REPO)/$(BINARY):latest

.PHONY: push
push: docker ## Push docker image
	@docker push $(DOCKER_REPO)/$(BINARY):$(VERSION)
	@docker push $(DOCKER_REPO)/$(BINARY):latest

.PHONY: clean
clean: ## Clean build artifacts
	@rm -f $(BINARY)
	@rm -f coverage.out coverage.html

总结

mmake为Golang项目提供了一种现代化、模块化的构建方式,相比传统Makefile具有以下优势:

  1. 更简洁的语法
  2. 更好的模块化和代码重用
  3. 内置Golang项目常用任务
  4. 易于扩展的插件系统
  5. 自动文档生成

通过合理使用mmake,可以显著简化Golang项目的构建和部署流程,提高开发效率。

回到顶部