嵌入式技术笔记(六):makefile中的内置变量和企业级makefile的相关函数

1. makefile里的内置变量
编辑makefile,代码如下:
mg=add.o sub.o mul.o div.o main.o,内置变量为mg;
在之后用到add.o sub.o mul.o div.o main.o时,可以用$(mg)

mg=add.o sub.o mul.o div.o main.o   

cal:$(mg)
	@gcc add.o sub.o mul.o div.o main.o -o cal
	//也可以写成
	//gcc $(mg) -o cal
    //makefile里有函数
	//gcc $(mg) -o $@
add.o:add.c
	@gcc -c add.c -o add.o
sub.o:sub.c
	@gcc -c sub.c -o sub.o
mul.o:mul.c
	@gcc -c mul.c -o mul.o
div.o:div.c
	@gcc -c div.c -o div.o
main.o:main.c
	@gcc -c main.c -o main.o
.PHONY:clean
clean:
	@rm -rf *.o cal

内置变量定义的三种形式:
mg=add.o sub.o mul.o div.o main.o
mg:=add.o sub.o mul.o div.o main.o
mg +=add.o sub.o mul.o div.o main.o //注意+前有空格

2. makefile的命名注意点
当将makefile重命名为Makefile时,make仍有用;但是将makefile重命名为makeFile时,就会出现错误。
makeFile的错误
用make clean -f makeFile就能解决,如下图:
make clean -f makeFile命令执行结果
3. 企业级makefile编号

  • 1、总控makefile:进入各个功能的子目录执行make命令,并将所有.o文件生成可执行文件。
  • 2、功能目录makefile:将功能目录下的所有.c文件编译成.o文件。
  • 3、脚本目录makefile:定义其他makefile文件所用到的变量。
    对于企业级makefile的阅读顺序:3 — 1 — 2

4.关于脚本目录scripts中makefile的一些函数
下列是脚本目录makefile:

CC := gcc
CFLAGS := -Wall -O3 //-Wall显示所有警告信息,-O3是最高优化选项
Libs = -lpthread
Target := client
Source := $(wildcard src/*.c)
Objs := ( p a t s u b s t (patsubst %.c,%.o, (patsubst(Source))
Modules += check_putin pack_message main
AllObjs := ( a d d s u f f i x / s r c / ∗ . o , (addsuffix /src/*.o, (addsuffix/src/.o,(Modules))

相关函数:
1、$(wildcard 模式参数)

  • 功能:列出所有符合模式参数的文件名
  • 例子:result := $(wildcard *.c)
    return(返回)当前目录下所有.c文件

2、$(patsubst 模式参数,参数1,参数2)

  • 例子:result := $(patsubst %.c,%.o,x.c,y.c)
    result := x.o y.o

3、:=

  • 功能:赋值,防止后面变量出现死循环
  • 例子:
    (1)a1 := a.o a2 := $(a1) b.o
    则a1 = a.o,a2 = a.o b.o
    (2)a1 := $(a2) b.o a2 := a.o
    则a1 = b.o,a2 = a.o

4、+=

  • 功能:给变量追加值
  • 例子:a1 = a.o a1 += b.o,则a1 = a.o b.o
    相当于a1 = a.o a1 := $(a1) b.o,则a1 = a.o b.o

5.关于总控makefile中的函数

1、$(foreach 变量参数,参数1,表达式)

  • 功能:循环取出参数1里的单词赋值给变量参数,然后运行表达式。
  • 返回值:表达式的结果
  • 例子:a := x y z result := ( f o r e a c h b , (foreach b, (foreachb(a),$(b).c),
    则result = x.c y.c z.c

2、$(call 变量函数,参数…)

  • 功能:循环把参数依次赋值给变量中的 ( 1 ) 、 (1)、 (1)(2)…
  • 返回值:赋值后的变量值
  • 例子:a := $(2) $(1) result := $(call $(a),x y),
    则result = yx
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值