gitea bindata static
gitea 可以通过 make generate
生成一个单文件可执行程序,
该文件不需要任何其它依赖,直接可以单独执行。
对于用户的安装、升级和生成docker image等都会方便很多。
makefile
gitea安装指南有说:
TAGS="bindata" make generate build
那么,上面这句执行后,发生了什么?
- 强制指定了
TAGS
变量 makefile里会自动读取 - 执行任务
-
generate
任务 -
build
任务
-
generate 任务
从makefile看
GO ?= go
## 使用go list 列出目录中所有导入包
## 过滤掉所有包含 /vendor/ 目录的结果
## 过滤掉 code.gitea.io/gitea/integrations
PACKAGES ?= $(filter-out code.gitea.io/gitea/integrations,$(shell $(GO) list ./... | grep -v /vendor/))
.PHONY: generate
generate:
@hash go-bindata > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
$(GO) get -u github.com/jteeuwen/go-bindata/...; \
fi
$(GO) generate $(PACKAGES)
通过注释,基本已经清楚generate需要做的动作了。
- 列出所有导入包
- 过滤掉不需要的路径
- 使用
go generate
指令执行go源码文件内设定的指令
背景知识
- makefile
- hash 指令
- text functions
- go build tags
- go generate