构建的定义
- 代码变成可执行文件,叫做编译(compile)
- 先编译这个文件,然后编译那个文件(即编译的安排),叫做构建(build)
Make 是什么
Make 是最常用的构建工具,诞生于 1977 年,主要用于 C 语言项目。
实际上,任何只要某个文件有变化,就要重新构建的项目,都可以用 Make 构建。
Make 使用
在当前目录下创建一个 Makefile 文件,然后执行 make
。
或执行 make target
,其中的 target
是指 Makefile 文件中任一个目标。
Makefile 文件
make 只是一个根据指定的 Shell 命令进行构建的工具。
它的规则很简单,你规定要构建哪个文件、它依赖哪些源文件,当那些文件有变动时,如何重新构建它。
构建规则都写在 Makefile 文件里面,要学会如何 Make 命令,就必须学会如何编写 Makefile 文件。
规则
Makefile 文件由一系列规则(rules)构成。每条规则的形式如下:
<target> : <prerequisites>
[tab] <commands>
- 一个目标(target)就构成一条规则。目标是文件名或者操作的名字(伪目标 phony target)
- 前置条件(prerequisites)通常是一组文件名,之间用空格分隔
- 命令(commands)表示如何更新目标文件,由一行或多行的 Shell 命令组成
前置条件(prerequisites)指定了目标(target)重新构建的判断标准:
- 只要有一个前置文件不存在
- 前置文件有过更新(前置文件的 last-modification 时间戳比目标的时间戳新)
Makefile 语法
- 注释:用井号(#)表示
- 回声(echoing):make 会先打印每条命令,然后执行,这个打印称为回声
- 通配符(wildcard):用来指定一组符合条件的文件名
- 模式匹配:对文件名进行类似正则运算的匹配
- 变量:用等号初始化并赋值自定义变量。调用时,变量需要放在
$()
中 - 赋值符:提供四种赋值运算符(
=
:=
?=
+=
) - 内置变量(Implicit Variables):
$(CC)
指向当前使用的编译器 - 自动变量(Automatic Variables):
$@
指代当前目标,$^
指代所有前置条件 - 判断和循环:Makefile 使用 Bash 语法,完成判断和循环
- 函数:使用格式如
$(function arguments)
或${function arguments}