make:一般说GNU Make,是一个软件,用于将源代码文件编译为可执行的二进制文件,make工具主要用于完成自动化编译。make工具编译的时候需要Makefile文件提供编译文件。
Makefile:make工具所使用的文件,Makefile指明了编译规则。
参考《鸟哥的Linux私房菜》
1.Makefile基本框架
2.Makefile变量使用
1 #Makefile 变量的使用
2 objects = main.o input.o alu.o
3 main: $(objects)
4 gcc -o main $(objects)
使用时 $(变量名称)
(1)赋值符“=” 等于后面的
1 name = qiuqiu
2 curname = $(name)
3 name = qiu
4
5 print:
6 @echo curname: $(curname)
qiu
(2)赋值符“:=” 等于前面的
1 name = qiuqiu
2 curname := $(name)
3 name = qiu
4
5 print:
6 @echo curname: $(curname)
qiuqiu
(3)赋值符“?=”
1 curname ?= qiu
2 如果变量 curname 前面没有被赋值,那么此变量就是“qiu”,
3 如果前面已经赋过值了,那么就使用前面赋的值
(4)变量追加“+=” (顾名思义)
3.Makefile模式规则
通过模式规则我们就可以使用一条规则来将所有的.c 文件编译为对应的.o 文件
举例:“%.c”就是所有的以.c 结尾的 文件,类似与通配符,a.%.c 就表示以 a.开头,以.c 结束的所有文件
4.Makefile自动化变量
参考正点原子
5.Makefile伪目标
一般的目标名都是要生成的文件,而伪目标不代 表真正的目标名
伪目标声明
.PHONY : clean #为了避免文件中本身就有clean文件而不会执行rm
6.Makefile 条件判断
7.Makefile 函数使用
(1)函数 subst 用来完成字符串替换
$(subst
示例:
$(subst qiu,QIU,my name is qiu)
把字符串“my name is qiu”中的“qiu”替换为“QIU”,替换完成以后的字符串为“my name is QIU”。
(2)函数 patsubst 用来完成模式字符串替换
$(patsubst
此函数查找字符串
替换掉,
示例:
$(patsubst %.c,%.o,a.c b.c c.c)
将字符串“a.c b.c c.c”中的所有符合“%.c”的字符串,替换为“%.o”,替换完成以后的字 符串为“a.o b.o c.o”。
(3)函数 dir 用来获取目录
$(dir
示例:
$(dir )
提取文件“/src/a.c”的目录部分,也就是“/src”。
(4)函数 notdir 去除文件中的目录部分
示例:
$(notdir )
提取文件“/src/a.c”中的非目录部分,也就是文件名“a.c”。
(5)函数 foreach 完成循环
$(foreach , ,
此函数的意思就是把参数中的单词逐一取出来放到参数中,然后再执行
(6)函数 wildcard
通配符“%”只能用在规则中,只有在规则中它才会展开,如果在变量定义和函数使用时, 通配符不会自动展开,这个时候就要用到函数 wildcard,使用方法如下:
$(wildcard PATTERN…)
示例:
$(wildcard *.c)
上面的代码是用来获取当前目录下所有的.c 文件,类似“%”。
Ps: