四、make工具和Makefile文件

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 <from>,<to>,<text>)

示例:

$(subst qiu,QIU,my name is qiu) 

把字符串“my name is qiu”中的“qiu”替换为“QIU”,替换完成以后的字符串为“my name is QIU”。

(2)函数 patsubst   用来完成模式字符串替换

$(patsubst <pattern>,<replacement>,<text>)

此函数查找字符串<text>中的单词是否符合模式<pattern>,如果匹配就用<replacement>

替换掉,<pattern>可以使用通配符“%”,表示任意长度的字符串,函数返回值就是替换后的字 符串。如果<replacement>中也包涵“%”,那么<replacement>中的“%”将是<pattern>  中的那个 “%”所代表的字符串

示例:

$(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 <names>)

示例:

$(dir </src/a.c>)

提取文件“/src/a.c”的目录部分,也就是“/src”。

(4)函数 notdir     去除文件中的目录部分

示例:

$(notdir </src/a.c>)

提取文件“/src/a.c”中的非目录部分,也就是文件名“a.c”。

(5)函数 foreach     完成循环

$(foreach <var>, <list>,<text>)

此函数的意思就是把参数<list>中的单词逐一取出来放到参数<var>中,然后再执行<text>所包含的表达式。每次<text>都会返回一个字符串,循环的过程中,<text>中所包含的每个字符串 会以空格隔开,最后当整个循环结束时,<text>所返回的每个字符串所组成的整个字符串将会是 函数 foreach 函数的返回值

(6)函数 wildcard

通配符“%”只能用在规则中,只有在规则中它才会展开,如果在变量定义和函数使用时, 通配符不会自动展开,这个时候就要用到函数 wildcard,使用方法如下:

$(wildcard PATTERN)

示例:

$(wildcard *.c)

上面的代码是用来获取当前目录下所有的.c 文件,类似“%”。

Ps:

  1. 注释开头要 用符号“#
  2. 换行用tab(四个字节)非空格,注意命令颜色
  3. ifeq末尾加endif

  

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qiuqiu1186

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值