Makefile 示例
使用
.PHONY
的作用有两个
- 一
.PHONY
后跟伪目标
,直接在 Makefile 中执行 伪目标
的命令。忽略 Makefile 同级目录下的同名的文件
- 二是提高执行makefile时的效率。
Makefile
中执行的命令以横杠-
开头,表示忽略命令执行的状态
make -j 4
指定并行编译的任务数,可以大大缩短编译时间,-j
指定CPU个数
-j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg.
shell 函数
参数是操作系统的 shell 命令,功能和使用 (`) 相同
- 示例
ipaddress := $(shell ip a)
Makefile 示例
Golang
# https://www.xiexianbin.cn/program/tools/2016-01-09-makefile/index.html
.PHONY: all test clean build build-linux build-mac build-windows
GOCMD=go
GOBUILD=$(GOCMD) build
GOCLEAN=$(GOCMD) clean
GOTEST=$(GOCMD) test
BINARY_NAME=main
BINARY_LINUX=$(BINARY_NAME)-linux
BINARY_MAC=$(BINARY_NAME)-darwin
BINARY_WIN=$(BINARY_NAME)-windows
help: ## Show this help.
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {sub("\\\\n",sprintf("\n%22c"," "), $$2);printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)
all: clean test build build-linux build-mac build-windows ## Build all
test: ## run test
$(GOTEST) -v ./...
clean: ## run clean bin files
$(GOCLEAN)
rm -f bin/$(BINARY_NAME)
build: ## build for current os
$(GOBUILD) -o bin/$(BINARY_NAME) -v
build-linux: ## build linux amd64
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 $(GOBUILD) -o bin/$(BINARY_LINUX) -v
build-mac: ## build mac amd64
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 $(GOBUILD) -o bin/$(BINARY_MAC) -v
build-windows: ## build windows amd64
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 $(GOBUILD) -o bin/$(BINARY_WIN) -v