第15课 - make 的隐式规则(上)

1. 目标拆分

mekefile 中出现同名目标时

  • 依赖:所有的依赖将合并在一起,成为目标的最终依赖
  • 命令:当多处出现同一目标的命令时,make发出警告,所有之前的命令将被最后定义的命令覆盖

EG:

all : 
	@echo "the one all"

all :
	@echo "the two all"

all :
	@echo "the three all"

执行结果:

在这里插入图片描述

2. 初探隐式规则

什么是隐式规则?

  • make 提供了一些常用的,例行的规则实现
  • 当相应的目标的规则未提供时,make尝试使用隐式规则

代码示例:( 思考下面的makefile文件是否可以执行 )

[main.c]
#include<stdio.h>
void func();
int main()
{
	func();
	return 0;
}

[func.c]
#include<stdio.h>
void main()
{
	printf("func\n");
}

[makefile]
main.out : func.o main.o
	gcc -o $@ $^

执行结果:

在这里插入图片描述

结果分析:

这里有很多疑问?cc 是什莫?生成.o文件对应的规则在哪里
- cc是make解释器中默认的预定义变量
- 生成.o 的规则也是make默认的隐式规则

隐式规则分析:

  • make 提供了生成目标文件的隐式规则
  • 隐式规则会使用预定义变量完成编译工作
  • 改变预定义变量将部分改变隐式规则的行为
  • 自定义规则优先级别更高,当存在自定义规则时,不在使用隐式规则

3. 总结

  • 当多处出现同一目标的命令时,只有最后定义的命令有效
  • make 提供了一些列的隐式规则可使用
  • 当 makefile 中未定义相关规则时,尝试使用隐式规则
  • 隐式规则中可能使用 make 中的预定义变量
  • 改变预定义变量可部分改变预定义规则的行为
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值