Makefile

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
上一篇:makefile的使用


下一篇:make