跳到主要内容

引言

复杂的一个项目有工程,编译通常会有有很多依赖项,这个时候就要引入批量构建技术,大名鼎鼎的docker有Dockerfile ,Unix通常用make工具 make是什么? Make 是一个构建自动化工具,会在当前目录下寻找 Makefile 或 makefile 文件。如果存在,会依据 Makefile 的构建规则去完成构建

1、安装make window

下载链接 sourceforge.net/projects/mi…

1、解压之后会得到一个mingw64的文件夹,将其拷贝到你要安装的目录。 2、解压完毕之后需要配置环境变量 3、path下添加你的mingw64/bin,如:D:\mingw64\bin 4、打开cmd执行gcc -v 5、将mingw32-make.exe 改为 make.exe 6、执行make -v

linux
yum install -y make

make -v
复制代码
2、makefile规则
<target> : <prerequisites>
[tab] <commands>

复制代码

target: 即自定义的自己想要执行的命令
prerequisites: 先决条件,执行在target之前,多个用空格隔开
tab: 每一个command前面一定要有制表符,用于标示这是命令
commands: 具体执行的命令。
.PHONY 伪指令,主要作用是命名避免与同名文件冲突和提高性能,加上后此参数,当存在冲突文件,也会执行 target, 否则会报错。
不带执行参数,默认执行第一个target
在command前加上@,禁止打印出command执行语句,只显示执行结果
${val}表示变量,与shell一样使用
允许使用通配符
‘#’表示注释

3、makfile示例

项目目录新建makefile或者Makefile

Go parameters

BINARY_NAME=go-api
BINARY_UNIX=$(BINARY_NAME)_unix
VERSION="v0.0.1"
DATE= `date +%Y%m%d%H%M%S`

.PHONY: all

all: version test build

version:
@echo version: ${VERSION}
build:
@echo version: ${VERSION} date: ${DATE} os: windows
@go build -o $(BINARY_NAME) -v -race
test:
go test tests/* -count=1
clean:
go clean
rm -f $(BINARY_NAME)
rm -f $(BINARY_UNIX)
run:
go build -o $(BINARY_NAME) -v ./...
./$(BINARY_NAME)

# Cross compilation
build-linux:
@echo version: ${VERSION} date: ${DATE} os: linux-centOS
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o $(BINARY_UNIX) -v
复制代码

执行命令

make version
make build
复制代码

错误:*** missing separator (did you mean TAB instead of 8 spaces?). Stop


解决方案:前面用TAB键,而不是空格空格空格


著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。