MakeFile走读与语法基础

本文详细介绍了Makefile的编译原理和语法。阐述了Makefile是自动化编译的配置脚本,说明了其包含的显示规则、隐晦规则等内容,介绍了规则的构成,还通过示例展示其工作方式,最后讲解了变量使用、引用其他Makefile及make的工作流程。

标题编译原理和语法详解

什么是Makefile

  1. makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要重新编译,如何进行链接操作。
  2. makefile就是“自动化编译",告诉make命令如何编译和链接。make命令的配置脚本

Makefile里面有什么

makefile包含以下五个:

  1. 显示规则:如何生成一个或多个目标文件
  2. 隐晦规则:make有自动推导功能,隐晦规则可以比较简略的书写makefile
  3. 变量定义:定义一些列字符串的变量,类似于C中的宏,makefile执行时,其中的变量都会被扩展到相应的引用位置上。
  4. 文件指示:在一个makefile中引用另一个makefile(类似C中的include)、根据某些情况制定makefile中的有效部分(C语言中的预编译)、定义一个多行的命令
  5. 注释:只有行注释使用‘#’,如果要使用‘#’则需要使用反斜杠 ‘#’表示。

Makefile的规则

  1. target:目标文件。可以是Object File,也可以是执行文件,还可以是标签(Label)

  2. prerequisties: 依赖文件即要生成那个target所需要的文件或者其它target

  3. command:make需要执行的命令

    target … : prerequisites …
    command
    或者
    target … : prerequisites … ;command

Makefile示例

在这里插入图片描述

Makefile是如何工作的

默认方式下,输入make命令后:

  1. make会在当前目录下找名字叫”Makefile“或”makefile“的文件。
  2. 如果找到,它会找文件中第一个目标文件(target),并把这个target作为最终的目标文件,如前面示例中的”main“。
  3. 如果main文件不存在,或main所依赖的.o文件的修改时间要比main文件要新,那么它会执行后面所定义的命令来生成main文件。
  4. 如果main所依赖的.o文件也存在,那么make会在当前文件中找目标为.o文件的依赖性,若找到则根据规则生成.o文件。
  5. make再用.o文件声明make的终极任务,也就是执行文件”main“。

Makefile中使用变量

在这里插入图片描述

引用其它的Makefile

在这里插入图片描述

环境变量MAKEFILES

如果当前环境中定义了环境变量MAKEFILES,那么,make会把这个变量中的值做一个类似于include的动作。这个变量中的值是其它Makefile,用空格分隔。只是,它和include不同的是,从这个环境变量中引入的Makefile的”目标“不会起作用,如果环境变量中定义的文件发现错误,make也不会理会。但是建议不要使用这个环境变量,因为只要这个变量一被定义,那么当你使用make时,所有的Makefile都会受到它的影响。也许有时候Makefile出现了奇怪的事,那么可以查看当前环境中有没有定义这个变量。

Makefile预定义变量

在这里插入图片描述

Makefile自动变量

在这里插入图片描述

Makefile函数

在这里插入图片描述

make的工作流程

GUN的make工作时的执行步骤如下
1. 读入所有的Makefile。
2. 读入被include的其它Makefile。
3. 初始化文件中的变量。
4. 推导隐晦规则,并分析所有规则。
5. 为所有的目标文件创建依赖关系链。
6. 根据依赖关系,决定哪些目标要重新生成。
7. 执行并生成命令。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值