1,运算符
= 定义的变量具有延迟展开特性。
:= 定义的变量会立即展开。
?= 如foo ?= $(bar)的意思是:如果foo没有定义过,那么?=相当于=,定义foo的值是$(bar),但不立
即展开;如果先前已经定义了foo,则什么也不做,不会给foo重新赋值。
+= 运算符可以给变量追加值。例如:
objects = main.o
objects += $(foo)
foo = foo.o bar.o
object是用=定义的,+=仍然保持=的特性,objects的值是main.o $(foo)(注意$(foo)前面自动添
一个空格),但不立即展开,等到后面需要展开$(objects)时会展开成main.o foo.o bar.o。
如果变量还没有定义过就直接用+=赋值,那么+=相当于=。
2,常用的特殊变量
$@,表示规则中的目标。
$<,表示规则中的第一个条件。
$?,表示规则中所有比目标新的条件,组成一个列表,以空格分隔。
$^,表示规则中的所有条件,组成一个列表,以空格分隔。
3,自动处理头文件的依赖关系
可以用gcc的-M选项自动生成目标文件和源文件的依赖关系:不需要输出系统头文件的依赖关系,可以用-MM选项:
阅读(1958) | 评论(0) | 转发(0) |