转载:
https://www.ruanyifeng.com/blog/2015/02/make.html
https://seisman.github.io/how-to-write-makefile/overview.html
概念
make是一个命令工具,一般linux都有自带
可以做到对整个工程完全自动编译
规则(rules)
<target 目标> : <prerequisites 前置条件>
[tab] <commands 命令>
"目标"是必需的,不可省略;
"前置条件"和"命令"都是可选的,但是两者之中必须至少存在一个。
- 执行
make target
目标
可以是一个文件名,也可以是多个文件名,伪目标(操作名)
为防止 伪目标 与 文件名重复,用.PHONY: 声明伪目标
.PHONY: 伪目标1 伪目标2 ...
前置条件
通常是一组文件名
只要有一个前置文件不存在,或者有过更新(前置文件的last-modification时间戳比目标的时间戳新),"目标"就需要重新构建
命令
一行或多行的Shell命令组成
Makefile文件
规则都写在一个叫做Makefile的文件中,Make命令依赖这个文件进行构建
变量
# 定义变量 txt
txt = Hello World
test:
@echo $(txt) # 打印变量 txt
传入变量参数
make build VAR=value
build:
echo $(VAR)
例:编译go项目
.PHONY: build
GOCMD=GO111MODULE=on go
BINARY=bin/gorun
build:
@echo "build go binary..."
${GOCMD} build ${GOARGS} -o ${BINARY} main.go
@echo "build go binary done"
make -f ${makefile文件名} -C ${makefile的目录} build