(1)普通变量
如:
obj=main.o add.o sub.o mul.o div.o //将后面的值赋值给obj,obj就是一个普通变量
target=zsx //将zsx赋值给target
makefile中已经定义的一些普通变量(通常格式都是大写,类似环境变量,它们都是普通变量,直接赋值即可,任意类型皆可):CC,其值为gcc或cc(cc就是gcc,完全等价),且用户还可以修改这些值。
(2)自动变量
$<: 规则中的第一个依赖 $@: 规则中的目标 $^: 规则中的所有依赖
注意:这些变量只能在规则的命令中使用
(3)举例
则通过使用自动变量和普通变量,可以简化makefile的书写,下面举例说明。依然使用上篇的文章的例子。
[root@localhost src]# vim makefile
obj=main.o add.o sub.o mul.o div.o //普通变量
target=zsx //普通变量
$(target):$(obj)
$(CC) -ggdb3 $^ -o $@ //自动变量只能使用在命令中
main.o:main.c
$(CC) -pedantic -pipe -Wall -c $^ -o $@ -I ../include //单独拿出来 是因为其需要指明头文件,而头文件在另一个目录中
%.o:%.c
$(CC) -pedantic -pipe -Wall -c $< -o $@
[root@localhost src]# ls
add.c div.c main.c makefile mul.c sub.c
[root@localhost src]# make
cc -pedantic -pipe -Wall -c main.c -o main.o -I ../include
cc -pedantic -pipe -Wall -c add.c -o add.o
cc -pedantic -pipe -Wall -c sub.c -o sub.o
cc -pedantic -pipe -Wall -c mul.c -o mul.o
cc -pedantic -pipe -Wall -c div.c -o div.o
cc -ggdb3 main.o add.o sub.o mul.o div.o -o zsx
[root@localhost src]# ls
add.c add.o div.c div.o main.c main.o makefile mul.c mul.o sub.c sub.o zsx
[root@localhost src]# ./zsx
sum = 26