makefile概述

版权声明:如有需要转载,请声明出处 https://blog.csdn.net/hehuang139/article/details/84648371

核心

规则定义依赖关系

  • 这里的依赖关系可以理解为修改时间的先后,也可以理解为文件依赖
  • 执行文件依赖目标文件
  • 目标文件依赖源文件以及头文件

特性/组成

  • 规则
    • 组成
      • target 可以为文件,也可以为一个label,也可为多个文件
      • pre
        • 可空,无法形成依赖链,则必须手动调用,一般用于clean,install等目标
      • command
        • 一般为cc指令,但也支持linux的bash命令
    • 类型
      • 显式规则,即手动定义的规则
      • 隐式规则,内部默认的规则
        • .o 依赖同名的 .c,及目标文件可以只指定头文件依赖
    • 默认规则
      • 可以手动指定,通过default target来定义
        • default : defaulttarget(默认的target名)
        • 默认为第一个target
    • 语法
      • target : pre ; command
      • target : pre 推荐使用方式
        • tab(换行需要tab)command
  • 变量
    作用类似于c的宏定义,只做替换,不做处理
  • 文件指示
    类似于include,用于模块化的编译,但是实际上作用不是太大,目前没遇到需要使用的场景
  • 注释
    使用#进行注释
  • 其他特性
    • 通配
    • 伪目标(这个特性很重要) 不是文件的目标,一般用于定义任务,或者为目标定义别名
      • 原始用法
        • 用于目标和文件重名时,可以区分,因为目标不允许和文件重名
        • .PHONY : target 不重名可以不用强制使用这个
      • 高级用法
        • 可以定义多个任务
          • 伪目标也可以作为依赖,即可定义多个任务
            • 如最佳实践中的build依赖binary和module,他们都属于伪目标。
      • 后续补充,但是这些列举的特性基本能支撑大型项目的编译

makefile处理生命周期

  1. 读取所有Makefile
  2. 读入被include的其他Makefile
  3. 初始化文件中的白你两
  4. 推到隐式规则,并分析所有规则
  5. 生成关系链
  6. 根据依赖关系,决定哪些文件重新生成
  7. 执行生成命令

猜你喜欢

转载自blog.csdn.net/hehuang139/article/details/84648371