1.环境变量
- 并不推荐把许多的变量都定义在环境变量中
- make -e 可以用系统环境变量覆盖Makefile中定义的变量
- 默认情况下,只有通过命令行设置的变量会被传递
2.目标变量
- 可以和全局变量同名,因为它的作用范围只在这条规则以及连带的规则中有效
- 语法
# <variable-assignment> : 可以前面讲过的各种赋值表达式
# 如“=”,“:=”,“+=”或“?=”
# 设置这个变量会作用到由这个目标所引发的所有的规则中去
<target...> : <variable-assignment>
<target...> : override <variable-assignment>
# 在这个示例中,不管全局中的$(CFLAGS)的值什么,
# 在prog目标,以及其所引发的规则中(prog.o foo.o bar.o的规则)
# $(CFLAGS)的值都是“-g”
prog : CFLAGS = -g #指定规则 CFLAGS
prog : prog.o foo.o bar.o #上面指定规则 作用的文件名
$(CC) $(CFLAGS) prog.o foo.o bar.o
prog : prog.c
$(CC) $(CFLAGS) prog.c
foo.o : foo.c
$(CC) $(CFLAGS) foo.c
bar.o : bar.c
$(CC) $(CFLAGS) bar.c