:=
表示在赋值时立即展开右边表达式,并将结果存储在变量中。这种赋值方式是在执行 :=
的那一刻就将右侧表达式的值计算出来,并赋值给变量。因此,无论何时访问这个变量,它的值都不会再改变(除非显式地再次赋值)
+=
用于在已有变量的值后面追加内容,而不是替换掉原有的值。
?=
是 GNU Makefile 中的一个赋值运算符,称为 "条件赋值"。它的作用是仅在变量尚未定义时才进行赋值
MAKEFLAGS:是 Make 工具的一个内部变量,用来控制 Make 的行为。它可以包含 Make 的选项和变量。
sub-make:是指在 Makefile 中调用另一个 Make 进程(通常是为了在子目录中构建)。
就是第一次执行make指令的时候,Makefile内部的makeflags只是被完全解析出来了,随后make会调用sub-make,按照解析完成的makeflags进行编译动作。
makeflags选项
-j
:指定并行编译的线程数,例如-j4
表示使用 4 个线程并行编译。-k
:即使遇到错误也继续执行后续规则。-l
:限制负载平均值(例如-l 2
)。-s
:静默模式,不显示执行的命令。-r
:不使用内置规则。-R
:不使用内置变量。-e
:优先使用环境变量而不是 Makefile 中的变量。-w
:显示每个目录的工作信息。--include-dir
:指定include
文件的搜索路径。
PHONY
是一个特殊的 Makefile 变量,用于定义伪目标(phony targets)。伪目标是不会生成文件的目标,通常用作命令的别名或占位符。- 当你将某个目标添加到
PHONY
列表中,Make 就不会检查文件系统中是否存在与目标同名的文件,而是始终执行与该目标相关联的规则。
dir (path)
: 返回 path
的目录部分,去掉文件名部分。它可以用来提取一个路径中的目录部分,而忽略文件名。