GCC学习 (三)如何编写makefile

时间:2020-12-09 12:50:30

更多惊喜,请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

----

依赖文件的目录找不到,尝试到这个目录下找

 

由于博客园的简陋的自动保存功能,下面的内容已经丢失