博客搬家,原地址:https://langzi989.github.io/2017/09/20/makefile自动变量与隐晦规则推导/
makefile的使用可以大大简化程序编译的过程,不过对于新手来说makefile的执行规则理解起来还是很让人迷糊的。其中最重要的原因是makefile中使用了大量的隐晦规则和自动变量来简化makefile的编写.本节将记录一下makefile自动变量和隐晦规则的推导过程以及makefile的执行流程。
%.o:%.c
$(CC) -c $(CFLAGS) -o $@ $<
> 对于上面的推导规则,makefile是怎么将%c文件编译汇编成.o文件的?下面将针对这个问题进行讲解
## 自动变量
makefile中的自动变量实质上是对一类变量的简写,当我们在模式规则中对这类变量处理的时候可以直接使用自动变量简化makefile代码的编写。自动变量包括如目标文件,依赖文件等。下面以实例的方式列出了一些常用的自动变量:
```shell
a: a.o b.o c.o d.o
g++ -c $(CFLAGS) -o $@ $<
- @ : 表 示 模 式 规 则 中 的 目 标 文 件 , 对 于 上 面 的 模 式 规 则 , @: 表示模式规则中的目标文件,对于上面的模式规则, @:表示模式规则中的目标文件,对于上面的模式规则,@表示a
- < : 表 示 依 赖 中 的 第 一 个 文 件 . 对 于 上 述 规 则 , <: 表示依赖中的第一个文件.对于上述规则, <:表示依赖中的第一个文件.对于上述规则,<表示a.o
- : 表 示 所 有 依 赖 文 件 的 集 合 , 对 于 上 述 规 则 ^: 表示所有依赖文件的集合,对于上述规则 :表