Makefile语法
Makefile由一组 rules 组成。 rule通常如下所示:
targets: prerequisites
command
command
command
-
targets (目标) 是文件名,用空格分隔。 通常,每个rule只有一个。
-
commands (命令) 是通常用于创建目标的一系列步骤。 这些 需要以制表符 开头,不可以是空格。
-
prerequisites(先决条件) 也是文件名,用空格分隔。 在运行目标的命令之前,这些文件需要存在。 这些也称为 dependencies(依赖项)
快速示例
以下Makefile最终运行所有三个目标。 当你在终端运行make
时,它会按一系列步骤构建一个名为blah
的程序:
- make选择目标
blah
,因为第一个目标是默认目标 blah
需要blah.o
, 因此搜索blah.o
目标blah.o
需要blah.c
,所以搜索blah.c
目标blah.c
没有依赖关系,所以运行echo
命令- 然后运行
cc -c
命令,因为所有blah.o
依赖关系都查询完成了 - 运行顶部的
cc
命令,因为所有的blah
依赖都已完成 - 就是这样得到:
blah
一个编译完成的c程序
blah: blah.o
cc blah.o -o blah # 第三位运行
blah.o: blah.c
cc -c blah.c -o blah.o # 第二位运行
# 通常情况下,blah.c已经存在,但我想限制任何其他所需的文件
blah.c:
echo "int main() { return 0; }" > blah.c # 写入blah.c文件,首先运行