更多惊喜,请google“跟我一起写Makefile”
本文是该makefile教程的简明版
- makefile 基本格式 :
--------------------------
要生成的文件:依赖的文件
实际命令
--------------------------
执行make时,实际上生成的是第一个文件中要生成的文件,但是第一个要生成的文件,有依赖文件,所以就会继续寻找下一个要生成的文件
make命令是一个递归的过程,本身不包含gcc的过程
- 命令
如果冒号:后面没有依赖,则这是一个命令,使用make + 命令来执行
-----------
命令:
实际命令
-----------
该命令常见且只见于 clean
make的递归性质作用是为了方便多次编译,因为如果递归到一个文件,该文件已经修改过了,或者该文件不存在,则执行命令,否则不执行命令,节省花在gcc上时间
- 变量声明
-------
Name = thing
Name := thing
-------
使用变量时,用$(Name),变量不是全部大写,表示只在该文件内有效
- 隐晦规则
一般,abc.o文件肯定依赖abc.c,所以在写基本格式中,依赖就不用写某c文件了,这就是隐晦规则
- 包含
和c一样,使用include <a.mk>包含
- 这样,就可以明白makefile的工作过程(伪)了
1.将所有include展开
2.将所有变量初始化
3.将所有隐晦规则展开
4.将所有依赖关系展开
5.根据依赖关系,找到变动过得文件,重新生成
6.根据生成的文件,编译和链接
实际过程中,makefile并不马上展开,而是拖延到生成文件的时候再展开,当然是为了节省时间
- 通配符
通配符有三种
1. 波浪线~,等效$HOME
2. 星号*,指的是任意匹配符
3. 问号?,任意 至少一个
- 文件搜索
缺省路径 VPATH , 用法:
----
VPATH = 路径1:路径2:路径3
----
依赖文件的目录找不到,尝试到这个目录下找
由于博客园的简陋的自动保存功能,下面的内容已经丢失