Makefile
Makefile 是一种用于自动化编译和构建过程的工具
下载安装
zsh
% brew install make
如下:本文使用的 make v3.81
zsh
% make --version
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
This program built for i386-apple-darwin11.3.0
所处位置
Makefile 一般位于项目的根目录
[项目目录]
├─ ...
│
└─ Makefile
基本语法
目标与命令
Makefile 主要由一系列目标组成,通过目标管理要执行的相关命令
在终端可通过make
执行目标 ( 该目标的所有的命令语句默认会打印在终端,可通过@
省略打印 )
可使用.PHONY
将目标指定为伪目标,来避免该目标名与工作区中同名文件冲突
Makefile
.PHONY: 目标名1 目标名2
目标名1:
命令 # 该命令语句会被打印在终端
@命令 # 该命令语句不会被打印在终端
目标名2:
# ...
zsh
% cd [工作区]
% make [目标名]
例子:验证通过@
可以省略打印命令语句
Makefile
.PHONY: show-xxx show-yyy
show-xxx:
echo "xxx"
show-yyy:
@echo "yyy"
zsh
% make show-xxx
echo "xxx"
xxx
% show-yyy
yyy
变量
为了减少硬编码,建议使用变量存储固定的信息
变量名使用大写蛇形命名 ( SNAKE_CASE )
变量在目标的命令中可通过${}
、$()
引用
在终端可通过make
执行目标时会自动使用变量的默认值,也可通过传递新值对变量进行覆盖
Makefile
变量=值 # 变量的需要动态计算时,每次引用改变量都会重新计算
变量:=值 # 变量的需要动态计算时,定义变量时就决定且不再改变
变量=$(shell命令) # 存储 Shell 脚本命令,在引用该变量时执行脚本
目标名:
echo ${变量}
echo $(变量)
zsh
% cd [工作区]
% make [目标名] # 如果有变量则使用定义的默认值
% make [目标名] [变量]=值 # 为变量传递新值进行覆盖
例子:使用变量的默认值以及传递新值进行覆盖
Makefile
XXX=123
YYY=
.PHONY: show
show:
@echo ${XXX}
@echo ${YYY}
zsh
% make show
123
% make show YYY=888
123
888
条件判断
TODO:
循环遍历
TODO: