工程是由大量GCC文件构成,一个个执行过于麻烦,Makefile可以将工程文件有序执行
name=a
curname=$(name)
name=aa
变量的真实值取决于它所引用的变量的最后一次有效值
最后输出curname=aa
name=a
curname:=$(name)
name=aa
不会使用后面定义的变量,只能使用前面已经定义好的
最后输出curname=a
curname ?= z
curname没被赋值,就等于z
a=main,o
a+=input.o
a为main.o input,o
模式规则
main.o: main.c
gcc -c main.c
input.o: input.c
gcc -c input.c
calcu.o: calcu.c
gcc -c calcu.c
%.o:%.c
最常用



main.o: main.c
gcc -c main.c
input.o: input.c
gcc -c input.c
calcu.o: calcu.c
gcc -c calcu.c
%.o:%.c
gcc -c $<
伪目标
.PHONY : clean
ifeq 判断相等
ifeq (<参数 1>, <参数 2>) ifeq ‘‘<参数 1 <参数
ifeq ““<参数 1>””, ““<参数
ifeq ““<参数 1>””, ‘‘<参数
ifeq ‘‘<参数 1>’’, ““<参数
ifneq 判断不等
ifdef <变量名 >
如果“变量名”的值非空,那么表示表达式为真,否则表达式为假。“变量名”同样可以是一个函数的返回值。
ifndef 相反
$(subst <from>,<to>,<text>)
在text中,将 from 换成 to
$(subst zzk,ZZK,my name is zzk)
my name is zzk中,zzk 换成 ZZK
$(patsubst <pattern>,<replacement>,<text>)
在text中,所有符合 pattern 的 换成 replacement
与上头不一样的——完成模式字符串替换
pattern replacement可以用**%**表示
$(patsubst %.c,%.o,a.c b.c c.c)
提取目录
$(dir <names……>)
$(dir </src/a.c>)
返回/src
提取文件名
$(notdir <names……>)
$(notdir </src/a.c>)
返回a.c