makefile的两个变量(自动变量和普通变量)

(1)普通变量

如:

obj=main.o add.o sub.o mul.o div.o //将后面的值赋值给obj,obj就是一个普通变量

target=zsx  //将zsx赋值给target

makefile中已经定义的一些普通变量(通常格式都是大写,类似环境变量,它们都是普通变量,直接赋值即可,任意类型皆可):CC,其值为gcc或cc(cc就是gcc,完全等价),且用户还可以修改这些值。

makefile的两个变量(自动变量和普通变量)

(2)自动变量

$<: 规则中的第一个依赖     [email protected]: 规则中的目标     $^: 规则中的所有依赖

注意:这些变量只能在规则的命令中使用

makefile的两个变量(自动变量和普通变量)

(3)举例

则通过使用自动变量和普通变量,可以简化makefile的书写,下面举例说明。依然使用上篇的文章的例子。

[[email protected] src]# vim makefile

obj=main.o add.o sub.o mul.o div.o  //普通变量
target=zsx   //普通变量

$(target):$(obj)
        $(CC) -ggdb3 $^ -o [email protected]     //自动变量只能使用在命令中

main.o:main.c
        $(CC) -pedantic -pipe -Wall -c $^ -o [email protected] -I ../include   //单独拿出来 是因为其需要指明头文件,而头文件在另一个目录中

%.o:%.c
        $(CC) -pedantic -pipe -Wall -c $< -o [email protected]

[[email protected] src]# ls
add.c  div.c  main.c  makefile  mul.c  sub.c
[[email protected] 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

[[email protected] src]# ls
add.c  add.o  div.c  div.o  main.c  main.o  makefile  mul.c  mul.o  sub.c  sub.o  zsx
[[email protected] src]# ./zsx
sum = 26