自动化标准Makefile与lds

本文介绍了如何在Makefile中使用变量和自动化特性,实现命令行与参数的分离,通过变量收集依赖目标,以及如何利用模板化和通配符来编写可扩展的构建规则,包括GCC工具链配置、LDS链接脚本和清理操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

makefile的自动化,需要使用变量,以及自动变量。
实行命令行与参数的分离。

命令行只与变量打交道,而变量则携带不同的参数,这样,通过修改变量,命令的执行结果不同。
可以简单理解为,命令行是个函数,变量则是传递给函数的参数列表。
对参数列表的不同赋值,调用函数,返回的结果是不同的。

++++++++++++++++++++++++++++++++
objs变量。
用于收集所需的依赖目标,常见的是收集.o文件。

objs = start.o main.o 

ledc.bin : $(objs)

主目标。
BIN文件,依赖于一个O文件列表,这个O文件列表,由一个变量,即objs来收集。

CROSS = arm-linux-gnueabihf
ledc.bin : $(objs)
	$(CROSS)-ld -Timx6u.lds $^ -o ledc.elf 
	$(CROSS)-objcopy -O binary -S ledc.elf $@
	$(CROSS)-objdump -D -m arm ledc.elf > ledc.dis

GCC工具的前缀,由一个变量,即CROSS来描述。如果需要用不同的GCC工具,则只需要修改变量即可,不需要动命令行。
这里面用到了自动化变量。
自动化变量,是make的解析工具解析出的字符串。
解析工具的输入源,是当前所处的规则的目标集,包括当前目标和依赖目标集。
$@,是当前目标集,上述例子里,当前目标集只有一个元素,它是ledc.bin这个目标。
$^,是依赖目标集中的所有目标。即全依赖集,all depend obj

另外,还有一些,如
$<,是依赖目标集中的首元,
$?,是依赖目标集的子集,它表示较新依赖目标集,全依赖集中,所有比当前目标较新的依赖目标,都收集到这个依赖目标集中去。

+++++++++++++++++++++++++++++
通配规则。
通配符%,
遍历展开成多个规则。

%.o : %.c
	$(CROSS)-gcc -Wall -nostdlib -c  -O2 -o $@ $<
%.o : %.S
	$(CROSS)-gcc -Wall -nostdlib -c  -O2 -o $@ $<

make工具,遍历检查依赖目标集,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值