make的隐式规则

本文详细探讨了Makefile中同名目标的处理方式,指出当多个目标有相同命令时,最后定义的命令会被采用。同时,介绍了make的隐式规则,包括其在目标依赖不存在时的推导过程和可能带来的编译问题。还讲解了隐式规则链的潜在风险,并展示了如何查看和禁用隐式规则。此外,后缀规则作为隐式规则的一种形式,其特点和使用限制也得到了阐述。
摘要由CSDN通过智能技术生成

1.makefile中出现同名目标时
依赖:
所有的依赖将合并在一起,成为目标的最终依赖
命令:
当多处出现同一目标命令时,make发出警告
所有之前定义的命令被最后定义的命令取代
注意事项:
当使用include关键字包含其他文件时,需要确保被包含的文件中的同名目标只有依赖,没有命令;否则,同名目标的命令将被覆盖

2.什么是隐式规则
mkae提供了一些常用的,例行的规则实现
当相应目标的规则未提供时,make尝试使用隐式规则
make所有预定义变量有哪些:$(.VARIABLES)

初探隐式规则:
	make提供了生成目标文件的隐式规则
	隐式规则会使用预定义变量完成编译工作
	改变预定义变量将部分改变隐式规则的行为
	当存在自定义规则时,不再使用隐式规则

3.深入理解隐式规则
当make发现目标的依赖不存在时:
尝试通过依赖名逐一查找隐式规则
并且通过依赖名推导可能需要的源文件
在这里插入图片描述隐式规则的副作用:
编译行为难以控制
编译效率低下

隐式规则链:
当依赖的目标不存在时,make会极力组合各种隐式规则对目标进行创建,进而产生意料之外的编译行为!
例:需要名为N.o的目标:N.y -> N.c -> N.o

查看隐式规则:
查看所有:make -p
查看具体规则:make -p | grep “XXX”

隐式规则的禁用:
局部禁用:
在makefile中自定义规则
在makefile中定义模式(如:%.o:%.p)
全局禁用:
make -r

后缀规则简介:
后缀规则是旧时的“模式规则”
可以通过后缀描述的方式自定义规则
在这里插入图片描述双后缀规则:
定义一对文件后缀(依赖文件后缀和目标文件后缀)
如: .cpp.o == %.o:%.cpp
单后缀规则;
定义单个文件后缀(源文件后缀)
如:.c == %:%.c

关于后缀规则的注意事项:
后缀规则中不允许有依赖
后缀规则必须有命令,否则无意义
后缀规则将逐步被模式规则取代

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值