reference/docs/make.md
2022-12-03 17:41:21 +08:00

2.7 KiB

make 备忘清单

包含 最重要概念、函数、方法等的 make 备忘单。 初学者的完整快速参考。

Makefile 入门

示例

a.txt: b.txt c.txt
	cat b.txt c.txt > a.txt

工作流程

  • 读入所有的 Makefile
  • 读入被 include 的其它 Makefile
  • 初始化文件中的变量。
  • 推导隐晦规则,并分析所有规则。
  • 为所有的目标文件创建依赖关系链。
  • 根据依赖关系,决定哪些目标要重新生成。
  • 执行生成命令。

文件命令

文件会以 GNUmakefile(不推荐使用)、Makefilemakefile 查找目录下的名称。

自定义文件名称

$ make target -f NAME

我们可以使用 -f NAME 来指定需要编译的文件名

隐式生成

如果文件夹中没有 makefile 文件,只有 main.c 源文件,那么我们可以使用 make main.o 隐式生成链接文件

$ make main.o
# 实际执行: cc    -c -o main.o main.c

规则

TARGET: PREREQUISITES
  COMMAMD
...
  • target: 规则的目标。目标可以是规则的动作(如 clean 等),也可以是目标文件或者最后的可执行文件。
  • prerequisites: 规则的依赖。生成规则目标文件所需要的文件名列表(通常一个目标依赖于一个或者多个文件)。
  • command: 规则的命令行。规则要执行的动作(任意的 shell 命令或者在 shell 下执行的程序)。命令需要以 tab 键开头

清空目标文件

.PHONY: clean
clean:
  rm *.o temp

.PHONY 内置命令将排除 clean 文件,不会因为当前目录中因为有 clean 文件而不会不执行 clean 伪目标

clean 从来都是放在文件的最后

注释

makefile 文件的注释与 bash 脚本一致

# 这是一个注释
main.o : main.c
	cc -c main.c

换行 \

# 这是一个注释
main.o : main.c
	cc -c \
	main.c

引用其它的 Makefile

include 关键字可以把别的 Makefile 包含进来。这样使用 make 运行的时候就会

# makefile
include foo.make

如果你想让 make 不理那些无法读取的文件,而继续执.

-include <filename>

另见