$* 不包含扩展名的目标文件名称。
$+ 所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件。
$< 第一个依赖文件的名称。
$? 所有的依赖文件,以空格分开,这些依赖文件的修改日期比目标的创建日期晚。
$@ 目标的完整名称。
$^ 所有的依赖文件,以空格分开,不包含重复的依赖文件。
$% 如果目标是归档成员,则该变量表示目标的归档成员名称。例如,如果目标名称
为 mytarget.so(image.o),则 $@ 为 mytarget.so,而 $% 为 image.o。
AR 归档维护程序的名称,默认值为 ar。
ARFLAGS 归档维护程序的选项。
AS 汇编程序的名称,默认值为 as。
ASFLAGS 汇编程序的选项。
CC C 编译器的名称,默认值为 cc。
CCFLAGS C 编译器的选项。
CPP C 预编译器的名称,默认值为 $(CC) -E。
CPPFLAGS C 预编译的选项。
CXX C++ 编译器的名称,默认值为 g++。
CXXFLAGS C++ 编译器的选项。
FC FORTRAN 编译器的名称,默认值为 f77。
FFLAGS FORTRAN 编译器的选项。
如果命令行的第一个或前两个字符是 @ (at 符号)、-(连字符)和 +(加号)这几个符号之一或全部,那么将特别处理该命令,如下:
@ 使命令在被执行前不被回显。
- 使任何命令行的任何非零退出状态都被忽略。
+ 使命令行可以通过指定 -n、-q 或 -t 选项来执行。
make工具能理解两种类型的前提目标:
Type I: 正常前提目标(Normal Prerequisites)
正常前提目标能达成两个目的:
1. 影响build command执行顺序,即:在生成目标(target)的命令被执行前,所有的需要生成的前提目标(Prerequisites)的命令都需要被执行。
2. 影响依赖关系,即:如果任何一个前提目标(Prerequisites)比生成目标(target)新时,生成目标都将被认为太旧而需要被重新生成。
通常,上面的这两个目的正是你所需要的:当前提目标更新时,生成目标也需要更新。
Type II: 命令前提目标(order-only Prerequisites)
偶尔的,我们会遇到这样的情况:我们需要执行某个或某些规则,但不能引起生成目标被重新生成。此时你就需要使用命令前提目标。命令前提目标由一个管道符号即竖线“|”指示,位于前提目标列表中。
竖线左边的目标就是正常前提目标,竖线右边的目标就是命令前提目标,形式如下:
target : normal-prerequisites | order-only-prerequisites