1 Makefile基础
1.1 变量
Makefile中的变量都是字符串,类似于C语言中的宏。
main: main.o input.o hello.o
gcc -o main main.o input.o hello.o
用变量的方式修改上面代码:
#Makefile变量的使用
objects = main.o input.o hello.o
main: $(objects)
gcc -o main $(objects)
这里定义了一个变量objects,并且将main.o等赋值给它。后面的引用变量的方法是$(变量名)。
1.1.2 赋值符“=”
使用“=”在给变量赋值的时候,不一定要用已经定义好的值,也可以使用后面定义的值。
name = zzk
curname = $(name)
name = zch
print:
@echo curname: $(curname)
最后的输出结果是“zch”
1.1.3 “:=”
name = zzk
curname := $(name)
name = zch
print:
@echo curname: $(curname)
最后的输出结果是“zzk”。 :=赋值符,只能使用前面定义的值。
1.1.4 赋值符"?="
curname ?= zch
上述的代码的意思就是,如果变量curname前面没有被赋值,那么此变量就是“zch”,如果已经赋值了,就使用前面赋的值。
1.1.5 变量追加“+=”
即在前面已经定义好的变量,追加一个。
1.1.6 模式规则
每一个C文件都要写一个对应的规则,当C文件较多的时候显然是不能够这么做的。因此,可以使用Makefile中的模式规则。通过模式规则,我们就可以采取使用一条规则来将所有的.c文件编译成对应的.o文件。
在模式规则中模式规则中,至少在规则的目标定定义中要包涵“%”,否则就是一般规则,目标中的“%”,表示对文件名的匹配,“%”表示长度任意的非空字符串,比如“%.c”就是所有的以.c结尾的文件,类似于通配符,a.%.c表示的是以a开头,以c结束的所有文件。
1.1.7 自动化变量
就是所有的以.c结尾的文件,类似于通配符,a.%.c表示的是以a开头,以c结束的所有文件。
1.1.7 自动化变量