Makefile 指南
Make 是一个自动化构建工具,最初由 Stuart Feldman 在 1977 年开发。它通过读取名为 Makefile 的文件来确定如何编译和链接程序。Makefile 包含了一系列的规则,定义了目标文件、依赖关系和构建命令。
|
|
基本概念
- 目标(Target) :Makefile 中要生成的文件,通常是可执行文件或对象文件。
- 依赖(Dependency) :目标文件生成所需的源文件或其他目标文件。
- 命令(Command) :生成目标文件所需执行的命令,通常是编译或链接命令。
- 变量(Variable) :用于存储常用的值,如编译器选项、文件列表等,便于维护和修改。
- 模式规则(Pattern Rule) :定义了一种通用的规则,可以应用于多个目标文件,使用通配符表示。
- 伪目标(Phony Target) :不对应实际文件的目标,通常用于执行特定任务,如清理临时文件。
自动变量(Automatic Variable) :在规则的命令中使用的特殊变量,如
$@
(目标文件名)、$<
(第一个依赖文件名)等。1 2 3 4
# $@ = target name # $* = target name without suffix # $< = target dependence $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $*.c
高级特性
- 并行构建(Parallel Build) :Make 支持并行执行多个任务,通过 `-j` 选项指定并行任务数,提高构建速度。
- 调试(Debugging) :Make 提供了一些选项,如 `–debug`,用于调试 Makefile 的执行过程,帮助定位问题。
内置规则(Built-in Rules) :Make 自带了一些默认的规则,可以自动处理常见的文件类型,如
.c
到.o
的编译。当 GNU Make 判断你需要通过目标文件来生成可执行程序时,它会采用以下规则:1
$(CC) $(LDFLAGS) first.o second.o $(LDLIBS)
查看 make 默认规则可以使用下面的命令:
1
make -p > default_rules
- 后缀规则(Suffix Rule) :一种特殊的模式规则,基于文件后缀名定义转换规则,如
.c
到.o
- 命令行选项(Command Line Options) :Make 提供了多种命令行选项,如
-f
指定 Makefile 文件,-n
仅显示将要执行的命令等。 - 错误处理(Error Handling) :Make 在执行命令时,如果遇到错误,默认会停止执行,可以通过
-k
选项继续执行其他任务。