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