Makefile示例

Makefile示例——client

一、scripts/Makefile

scripts/Makefile
变量的使用方式:$(变量名)

1.定义变量

1)通过“=”实现
例如:

a1= $(a2)
a2= $(a3)
a3= a.o
此时变量a1的值是a.o,也就是说前面的变量可以通过后面的变量来定义。
但使用这种方式定义变量时,要防止出现死循环的情况。

2)通过“:=”实现
例如:

a1:= a.o
a2:= $(a1) b.o
此时变量a1的值是a.o,变量a2的值是a.o b.o。

a1:= $(a2) b.o
a2:= a.o
此时变量a1的值是b.o,而不是“a.o b.o”。
也就是说前面的变量不能通过后面的变量来定义。

3)通过“+=”实现——与C语言中+=功能一样
例如:

a1= a.o
a1+= b.o
这种方式下变量a1的值是“a.o b.o”。也就是说“+=”可以实现给变量追加值。

等同于如下示例:
a1= a.o
a1:= $(a1) b.o

4)通过"?="实现 ——防止重复定义
例如:

a1:= a.o
a1?=b.o
此时变量a1的值是a.o,而不是b.o。也就是说,如果变量a1已经在前面定义过了,那么后面的定义就无效了。

2.函数

格式:$(函数名 参数,参数…)

1)wildcard
格式:$(wildcard模式参数)
功能:列出当前目录下所有符合模式参数的文件名
返回值:当前目录下所有符合模式参数的文件名

Sourse:=$(wildcard src/*.c)#列出当前目录下src目录的所有.c文件

2)patsubst
格式:$(patsubset模式参数,参数1,参数2)
功能:把参数2中符合模式参数的单词(单词是指参数中被空格隔开的字符串)替换成参数1
返回值:被替换后的参数2

Objs:=$(patsubst %.c,%.o,%(Sourse))#将Sourse变量里的.c文件编译成.o文件

3)addsuffix
格式:$(addsuffix 参数1,参数2)
功能:在参数2中的每个单词加上后缀参数1
返回值:加上后缀的所有单词

Modules+=check_putin pack_message main#当前软件代码所有的功能目录
AllObjs:=$ (addsuffix /src/*.o,$(Modules))
#AllObjs:=check_putin /src/.o pack_message /src/.o main /src/*.o
#AllObjs:列出所有功能目录下的src目录下的.o文件

二、总控的Makefile

Makefile

include scripts/Makefile#导入Makefile,可以使用该Makefile的定义的变量

4)foreach
格式:$(foreach 变量参数,参数1,表达式)
功能:循环取出参数1中的单词赋给变量参数,然后运行表达式
返回值:表达式的运行结果

5)call
格式: ( c a l l 变 量 参 数 , 参 数 … ) 功 能 : 循 环 把 参 数 依 次 赋 给 变 量 参 数 中 的 (call 变量参数,参数…) 功能:循环把参数依次赋给变量参数中的 call(1)、$(2)…
返回值:赋值后的变量值

mm:
@ $ (foreach n,$ (Modules),$ (call modules_make,$(n)))
#进入各个子目录执行make命令
mc:
@ $ (foreach n,$ (Modules),$ (call modules_clean,$(n)))
#进入各个功能目录执行make clean命令

三、功能目录下
check_putin/Makefile
总结:
(1)总控Makefile:进入各个功能目录执行make命令,并将所有.o文件链接生成可执行文件
(2)功能目录Makefile:将功能目录下的源文件编译生成目标文件.o。
(3)Scripts目录头文件Makefile:定义变量,供其他makefile使用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值