makefile(01) _初识

  

0。声明

  

本系列(makefile)文章,从零基础开始,通过实验逐步分析makefile的语法特性,并最终打造一个可复用,可移植的专业编译环境。
参考:
1。DT唐老师门徒计划课程
2。GNU使手册:http://www.gnu.org/software/make/manual/make.html

  

1.使与makefile

  
      <李>让是一个应用程序:接续源程序之间的依赖关系,根据依赖关系自动维护编译工作,执行宿主操作系统中的各种命令。   <李> Makefile是一个描述文件:定义了系列的规则来指定源文件编译后的先后顺序,拥有特定的语法规则,支持函数定义和函数调用,能够直接集成操作系统的各种命令,本质上也是一种脚本。
    <强>两者的联系:   <李> Makefile中的描述用于指导让程序如何完成工作,李   <李>使根据Makefile中的规则执行命令,最后完成编译输出。
    简单示例:李   
  
 <代码>你好://目标
  回声“你好makefile”//实现目标要执行的命令,注意行首是一个表(\ t)  
  

- f mf。txt你好//- f表示指定mf。txt文件为规则定义文件Makefile,并执行文件里的你好目标

  

//执行默认规则定义文件(Makefile/Makefile)中的默认目标(第一个目标)

  

2. makefile结构

  

2.1.Makefile的意义:

  

Makefile用于定义源文件和依赖关系,说明如何编译各个源文件并生成可执行文件
依赖的定义:

  
 <代码>目标:prerequests;command1
  Command2  
  

2.2.Makefile中的元素含义:

//

目标通常是需要生成的目标文件名,使所需要执行的命令名称
//当前提前目标所依赖的其他目标或文件
命令//完成目标所需要的命令

  

2.3。注意事项:

  
      <李>目标和依赖可以有多个,使用空格分隔李   <李>每一个命令行必须以【选项】字符开始,用于高速让程序(解析器),此行时一个命令行   <李>续行符:\可以将内容分开写到下一行,提高可读性李   <李> Makefile中可以在命令前加@符上作用为命令无回显(Makefile默认会打印执行的每一个条命令)
    <>强技巧:
    开发中可以将可执行文件名和所有同时作为Makefile中第一条规则的目标,这样,当执行让命令并且目标已经存在时,将不会继续执行(除非依赖文件有更新)   

    2.4。依赖规则:

      

    当目标对应的文件不存在,执行对应命令
    当依赖在时间上比目标更新,执行对应命令
    当依赖关系发生时,对比依赖链上每一个目标

      
  
 <代码>你好。所有:函数。o main.o
  gcc - o你好。函数。o main.o
  
  函数。o: func.c
  gcc - o函数。o - c func.c
  
  主要。o: c
  gcc - o主要。o - c c  
  

 makefile(01) _初识

  

3。伪目标的引入

  

3.1.Makefile中的目标究竟是什么?

  

默认情况下,认为目标对应着一个文件,做会比较文件和依赖关系的新旧关系,决定执行是否执行命令,使以文件处理作为第一优先级。
所以当出现和目标同名的文件时,则在文件不被更新的前提下,目标不会被执行
 makefile(01) _初识

  

3.2.Makefile中的伪目标

  

通过假的关键字声明一个伪目标,伪目标不对应任何实际的文件,不管伪目标的依赖时否更新,命令总是执行。
伪目标的语法:先声明,后使用
本质:伪目标是让中特殊的目标:.PHONY的依赖

  
 <代码>。假的:清洁
  
  清洁:
  rm *。哦,你好。从射频 
  

3.3。伪目标的妙用:

  

规则调用,模拟C语言函数的概念。
原理:当一个目标的依赖包含伪目标时,伪目标所定义的命令总是会被执行。

  
 <代码>。假:重建干净
  
  重建:清洁所有
  
  :hello.out
  
  清洁:
  rm *。哦,你好。从射频 
  

3.4。绕开.PHONY关键字定义伪目标

  

原理:如果一个规则没有命令或者依赖,并且他的目标不是一个存在的文件名,在执行此规则是,目标总会被认为是最新的。

  
 <代码>清洁:力量
  rm *。哦,你好。从射频
  力量: 

makefile(01) _初识