makefile
中不允许使用空格
必须使用tab
进行缩进
打印变量
$(info 目标目录: $(dist_path))
获取当前项目路径
current_makefile_path := $(abspath $(lastword $(MAKEFILE_LIST)))
root_path = $(dir $(current_makefile_path))
设置变量
变量定义使用=
号直接定义, 使用变量使用$()
包裹起来
dist_path = $(root_path)dist
CGO_ENABLED = 1
获取系统的类型
使用变量 $(OS) 获取类型
使用 shell 命令获取系统类型,不过不支持windows
$(shell sh -c 'uname 2>/dev/null || echo Unknown')
判断语句
# 相等判断(不相等使用 ifneq)
ifeq 条件
shell命令
else
shell命令
endif
# 判断外部传入参数
ifdef 变量名
shell命令
else
shell命令
endif
定义执行tag
.PHONY: docker-push
docker-push: ; $(info ======== docker push image: $(image_name) ========)
docker push $(image_name)
.PHONY: docker-build
docker-build: ; $(info ======== docker build image: $(image_name) ========)
docker build -t $(image_name) .
.PHONY: docker-delete
docker-delete: ; $(info ======== docker delete image: $(image_name) ========)
- docker rmi $(image_name)
.PHONY: docker-clean
docker-clean: ; $(info ======== docker clean image: $(image_name) ========)
- docker rmi $(image_name)
定义执行一系列tag
.PHONY: docker-push-remote
docker-push-remote: docker-delete docker-build docker-push docker-clean
windows 复制文件命令
ROBOCOPY "$(root_path)resources" "$(dist_path)/resources" /E
忽略命令报错
在命令前加上 - 表示忽略命令执行错误
如下示例: 忽略删除错误
ifeq ($(OS),Windows_NT)
- rd /s /q "$(dist_path)"
- rd /s /q "$(root_path)logs"
else
- rm -rf $(dist_path)
- rm -rf $(root_path)logs
endif
windows 编译go程序
要写成一行,否则会造成环境变量不生效,命令之间使用&
符号连接,并且无空格
set CGO_ENABLED=$(CGO_ENABLED)&set GOOS=$(T_GOOS)&set GOARH=$(T_GOARCH)&go build -installsuffix cgo -o $(dist_path)/$(file_name) $(root_path)cmd\novel-downloader\main.go