使用 Go 管理 Makefile

简介

不少时候, 咱们须要运行多个命令来能完成一件事, 又或者某个命令须要指定不少参数.html

这个时候, 就须要使用脚原本取代这些复杂的命令, 减小输错命令的可能, 也能够为后来者指明经常使用的操做.node

Makefile

Makefile 就是为此而生的, 相对于用途普遍的 shell 脚本, Makefile 专一于构建自动化过程, 一般用于编译源码等. 不少项目都会提供 Makefile 文件, 只须要简单地运行 make 就能轻松完成编译构建的过程.mysql

简单介绍下 Makefile 的规则.linux

target: dependencies
    system command(s)
复制代码

target 一般是程序要生成的目标文件的名字. 但也能够是一个动做的名字.git

dependencies 是依赖, 一般是文件, 完成 target 所须要的输入.github

system command(s) 是完成 target 所须要运行的指令, 即 shell 命令. 一条语句一行, 使用单个 tab 缩进.web

使用 make 命令能够运行各类 target. 若是不带 target 参数, 第一个 target 会被做为默认目标.sql

不少时候, Makefile 不是为了编译, 也再也不引用任何文件, 仅仅是为了整合多个命令, 比写脚本方便多. 这个时候涉及到一个叫作伪目标的指令 .PHONY. .PHONY 后面跟着的多个 target 都不是要生成的文件的名字, 而是指代一个动做, 一个行为. 好比 test 指运行测试, clean 清理文件等.docker

.PHONY: all test clean doc ci
复制代码

更多内容能够参考 跟我一块儿写 Makefileshell

实践

注意, windows 下没有 make 命令, 因此 Makefile 也就没法使用.

你能够在 docker 容器中运行命令, 能够参考另外一篇文章 在 VS Code 中使用容器开发.

在项目的根目录添加 Makefile 文件:

all: gotool build
build:
	@go build ./
run:
	@go run ./
clean:
	rm -f web
	find . -name "[._]*.s[a-w][a-z]" | xargs -i rm -f {}
gotool:
	go fmt ./
	go vet ./
ca:
	MSYS_NO_PATHCONV=1 openssl req -new -nodes -x509 -out conf/server.crt -keyout conf/server.key -days 3650 -subj "/C=CN/ST=SH/L=SH/O=CoolCat/OU=CoolCat Software/CN=127.0.0.1/emailAddress=coolcat@qq.com"
mysql:
	docker-compose up -d mysql
dbcli:
	docker-compose run --rm dbclient

help:
	@echo "make - 格式化 Go 代码, 并编译生成二进制文件"
	@echo "make build - 编译 Go 代码, 生成二进制文件"
	@echo "make run - 直接运行 Go 代码"
	@echo "make clean - 移除二进制文件和 vim swap files"
	@echo "make gotool - 运行 Go 工具 'fmt' and 'vet'"
	@echo "make ca - 生成证书文件"
	@echo "make mysql - 启动 mysql 服务器"
	@echo "make dbcli - 链接到 mysql 命令行"

.PHONY: all build run clean gotool ca mysql dbcli help
复制代码

这里的全部 target 都是伪目标.用来包装一些简单的 shell 命令.

能够在项目根目录下运行如下命令:

  • make - 格式化 Go 代码, 并编译生成二进制文件
  • make build - 编译 Go 代码, 生成二进制文件
  • make run - 直接运行 Go 代码
  • make clean - 移除二进制文件和 vim swap files
  • make gotool - 运行 Go 工具 'fmt' and 'vet'
  • make ca - 生成证书文件
  • make mysql - 启动 mysql 服务器
  • make dbcli - 链接到 mysql 命令行
  • make help - 查看帮助信息

有了 Makefile 的帮助, 不少事情变得简单起来了, 好比要生成证书文件, 只须要运行 make ca 就好了, 不用输入一大行命令了.

总结

Makefile 是 linux 下经常使用的工具, 对于提高效率是很是有效的.

当前部分的代码

做为版本 v0.11.0

相关文章
相关标签/搜索