Linux系统篇,开发工具(四):make及makefile的使用、makefile的使用细节

系列文章目录

第三章 开发工具的认识与使用


### 文章目录

  • [系列文章目录](#文章目录 系列文章目录 @TOC 前言 一、认识 make / makefile 1.1 make / makefile 是什么 1.2 make的概念与意义 1.3 makefile的概念和意义 1.4 两者的初步使用 二、make / makefile 的理解 2.1 基本语法 2.1.1 核心框架 2.1.2 依赖关系和依赖方法 2.1.3 两者的联系 2.2 项目清理 2.3 make的执行顺序 2.4 .PHONY 伪目标 2.4.1 make 执行问题 2.4.1.1 重复问题 2.4.1.2 时间辨别操作 2.4.2 .PHONY 伪目标 作用 2.5 推导规则 三、makefile的完善操作 3.1 定义变量与引用变量 3.2 @禁止回显 3.3 自动变量 3.4 依赖关系与依赖方法的对应 3.5 多文件处理 总结)
  • [@[TOC](文章目录)](#文章目录 系列文章目录 @TOC 前言 一、认识 make / makefile 1.1 make / makefile 是什么 1.2 make的概念与意义 1.3 makefile的概念和意义 1.4 两者的初步使用 二、make / makefile 的理解 2.1 基本语法 2.1.1 核心框架 2.1.2 依赖关系和依赖方法 2.1.3 两者的联系 2.2 项目清理 2.3 make的执行顺序 2.4 .PHONY 伪目标 2.4.1 make 执行问题 2.4.1.1 重复问题 2.4.1.2 时间辨别操作 2.4.2 .PHONY 伪目标 作用 2.5 推导规则 三、makefile的完善操作 3.1 定义变量与引用变量 3.2 @禁止回显 3.3 自动变量 3.4 依赖关系与依赖方法的对应 3.5 多文件处理 总结)
  • [前言](#文章目录 系列文章目录 @TOC 前言 一、认识 make / makefile 1.1 make / makefile 是什么 1.2 make的概念与意义 1.3 makefile的概念和意义 1.4 两者的初步使用 二、make / makefile 的理解 2.1 基本语法 2.1.1 核心框架 2.1.2 依赖关系和依赖方法 2.1.3 两者的联系 2.2 项目清理 2.3 make的执行顺序 2.4 .PHONY 伪目标 2.4.1 make 执行问题 2.4.1.1 重复问题 2.4.1.2 时间辨别操作 2.4.2 .PHONY 伪目标 作用 2.5 推导规则 三、makefile的完善操作 3.1 定义变量与引用变量 3.2 @禁止回显 3.3 自动变量 3.4 依赖关系与依赖方法的对应 3.5 多文件处理 总结)
  • [一、认识 make / makefile](#文章目录 系列文章目录 @TOC 前言 一、认识 make / makefile 1.1 make / makefile 是什么 1.2 make的概念与意义 1.3 makefile的概念和意义 1.4 两者的初步使用 二、make / makefile 的理解 2.1 基本语法 2.1.1 核心框架 2.1.2 依赖关系和依赖方法 2.1.3 两者的联系 2.2 项目清理 2.3 make的执行顺序 2.4 .PHONY 伪目标 2.4.1 make 执行问题 2.4.1.1 重复问题 2.4.1.2 时间辨别操作 2.4.2 .PHONY 伪目标 作用 2.5 推导规则 三、makefile的完善操作 3.1 定义变量与引用变量 3.2 @禁止回显 3.3 自动变量 3.4 依赖关系与依赖方法的对应 3.5 多文件处理 总结)
  • [1.1 make / makefile 是什么](#文章目录 系列文章目录 @TOC 前言 一、认识 make / makefile 1.1 make / makefile 是什么 1.2 make的概念与意义 1.3 makefile的概念和意义 1.4 两者的初步使用 二、make / makefile 的理解 2.1 基本语法 2.1.1 核心框架 2.1.2 依赖关系和依赖方法 2.1.3 两者的联系 2.2 项目清理 2.3 make的执行顺序 2.4 .PHONY 伪目标 2.4.1 make 执行问题 2.4.1.1 重复问题 2.4.1.2 时间辨别操作 2.4.2 .PHONY 伪目标 作用 2.5 推导规则 三、makefile的完善操作 3.1 定义变量与引用变量 3.2 @禁止回显 3.3 自动变量 3.4 依赖关系与依赖方法的对应 3.5 多文件处理 总结)
  • [1.2 make的概念与意义](#文章目录 系列文章目录 @TOC 前言 一、认识 make / makefile 1.1 make / makefile 是什么 1.2 make的概念与意义 1.3 makefile的概念和意义 1.4 两者的初步使用 二、make / makefile 的理解 2.1 基本语法 2.1.1 核心框架 2.1.2 依赖关系和依赖方法 2.1.3 两者的联系 2.2 项目清理 2.3 make的执行顺序 2.4 .PHONY 伪目标 2.4.1 make 执行问题 2.4.1.1 重复问题 2.4.1.2 时间辨别操作 2.4.2 .PHONY 伪目标 作用 2.5 推导规则 三、makefile的完善操作 3.1 定义变量与引用变量 3.2 @禁止回显 3.3 自动变量 3.4 依赖关系与依赖方法的对应 3.5 多文件处理 总结)
  • [1.3 makefile的概念和意义](#文章目录 系列文章目录 @TOC 前言 一、认识 make / makefile 1.1 make / makefile 是什么 1.2 make的概念与意义 1.3 makefile的概念和意义 1.4 两者的初步使用 二、make / makefile 的理解 2.1 基本语法 2.1.1 核心框架 2.1.2 依赖关系和依赖方法 2.1.3 两者的联系 2.2 项目清理 2.3 make的执行顺序 2.4 .PHONY 伪目标 2.4.1 make 执行问题 2.4.1.1 重复问题 2.4.1.2 时间辨别操作 2.4.2 .PHONY 伪目标 作用 2.5 推导规则 三、makefile的完善操作 3.1 定义变量与引用变量 3.2 @禁止回显 3.3 自动变量 3.4 依赖关系与依赖方法的对应 3.5 多文件处理 总结)
  • [1.4 两者的初步使用](#文章目录 系列文章目录 @TOC 前言 一、认识 make / makefile 1.1 make / makefile 是什么 1.2 make的概念与意义 1.3 makefile的概念和意义 1.4 两者的初步使用 二、make / makefile 的理解 2.1 基本语法 2.1.1 核心框架 2.1.2 依赖关系和依赖方法 2.1.3 两者的联系 2.2 项目清理 2.3 make的执行顺序 2.4 .PHONY 伪目标 2.4.1 make 执行问题 2.4.1.1 重复问题 2.4.1.2 时间辨别操作 2.4.2 .PHONY 伪目标 作用 2.5 推导规则 三、makefile的完善操作 3.1 定义变量与引用变量 3.2 @禁止回显 3.3 自动变量 3.4 依赖关系与依赖方法的对应 3.5 多文件处理 总结)
  • [二、make / makefile 的理解](#文章目录 系列文章目录 @TOC 前言 一、认识 make / makefile 1.1 make / makefile 是什么 1.2 make的概念与意义 1.3 makefile的概念和意义 1.4 两者的初步使用 二、make / makefile 的理解 2.1 基本语法 2.1.1 核心框架 2.1.2 依赖关系和依赖方法 2.1.3 两者的联系 2.2 项目清理 2.3 make的执行顺序 2.4 .PHONY 伪目标 2.4.1 make 执行问题 2.4.1.1 重复问题 2.4.1.2 时间辨别操作 2.4.2 .PHONY 伪目标 作用 2.5 推导规则 三、makefile的完善操作 3.1 定义变量与引用变量 3.2 @禁止回显 3.3 自动变量 3.4 依赖关系与依赖方法的对应 3.5 多文件处理 总结)
  • [2.1 基本语法](#文章目录 系列文章目录 @TOC 前言 一、认识 make / makefile 1.1 make / makefile 是什么 1.2 make的概念与意义 1.3 makefile的概念和意义 1.4 两者的初步使用 二、make / makefile 的理解 2.1 基本语法 2.1.1 核心框架 2.1.2 依赖关系和依赖方法 2.1.3 两者的联系 2.2 项目清理 2.3 make的执行顺序 2.4 .PHONY 伪目标 2.4.1 make 执行问题 2.4.1.1 重复问题 2.4.1.2 时间辨别操作 2.4.2 .PHONY 伪目标 作用 2.5 推导规则 三、makefile的完善操作 3.1 定义变量与引用变量 3.2 @禁止回显 3.3 自动变量 3.4 依赖关系与依赖方法的对应 3.5 多文件处理 总结)
  • [2.1.1 核心框架](#文章目录 系列文章目录 @TOC 前言 一、认识 make / makefile 1.1 make / makefile 是什么 1.2 make的概念与意义 1.3 makefile的概念和意义 1.4 两者的初步使用 二、make / makefile 的理解 2.1 基本语法 2.1.1 核心框架 2.1.2 依赖关系和依赖方法 2.1.3 两者的联系 2.2 项目清理 2.3 make的执行顺序 2.4 .PHONY 伪目标 2.4.1 make 执行问题 2.4.1.1 重复问题 2.4.1.2 时间辨别操作 2.4.2 .PHONY 伪目标 作用 2.5 推导规则 三、makefile的完善操作 3.1 定义变量与引用变量 3.2 @禁止回显 3.3 自动变量 3.4 依赖关系与依赖方法的对应 3.5 多文件处理 总结)
  • [2.1.2 依赖关系和依赖方法](#文章目录 系列文章目录 @TOC 前言 一、认识 make / makefile 1.1 make / makefile 是什么 1.2 make的概念与意义 1.3 makefile的概念和意义 1.4 两者的初步使用 二、make / makefile 的理解 2.1 基本语法 2.1.1 核心框架 2.1.2 依赖关系和依赖方法 2.1.3 两者的联系 2.2 项目清理 2.3 make的执行顺序 2.4 .PHONY 伪目标 2.4.1 make 执行问题 2.4.1.1 重复问题 2.4.1.2 时间辨别操作 2.4.2 .PHONY 伪目标 作用 2.5 推导规则 三、makefile的完善操作 3.1 定义变量与引用变量 3.2 @禁止回显 3.3 自动变量 3.4 依赖关系与依赖方法的对应 3.5 多文件处理 总结)
  • [2.1.3 两者的联系](#文章目录 系列文章目录 @TOC 前言 一、认识 make / makefile 1.1 make / makefile 是什么 1.2 make的概念与意义 1.3 makefile的概念和意义 1.4 两者的初步使用 二、make / makefile 的理解 2.1 基本语法 2.1.1 核心框架 2.1.2 依赖关系和依赖方法 2.1.3 两者的联系 2.2 项目清理 2.3 make的执行顺序 2.4 .PHONY 伪目标 2.4.1 make 执行问题 2.4.1.1 重复问题 2.4.1.2 时间辨别操作 2.4.2 .PHONY 伪目标 作用 2.5 推导规则 三、makefile的完善操作 3.1 定义变量与引用变量 3.2 @禁止回显 3.3 自动变量 3.4 依赖关系与依赖方法的对应 3.5 多文件处理 总结)
  • [2.2 项目清理](#文章目录 系列文章目录 @TOC 前言 一、认识 make / makefile 1.1 make / makefile 是什么 1.2 make的概念与意义 1.3 makefile的概念和意义 1.4 两者的初步使用 二、make / makefile 的理解 2.1 基本语法 2.1.1 核心框架 2.1.2 依赖关系和依赖方法 2.1.3 两者的联系 2.2 项目清理 2.3 make的执行顺序 2.4 .PHONY 伪目标 2.4.1 make 执行问题 2.4.1.1 重复问题 2.4.1.2 时间辨别操作 2.4.2 .PHONY 伪目标 作用 2.5 推导规则 三、makefile的完善操作 3.1 定义变量与引用变量 3.2 @禁止回显 3.3 自动变量 3.4 依赖关系与依赖方法的对应 3.5 多文件处理 总结)
  • [2.3 make的执行顺序](#文章目录 系列文章目录 @TOC 前言 一、认识 make / makefile 1.1 make / makefile 是什么 1.2 make的概念与意义 1.3 makefile的概念和意义 1.4 两者的初步使用 二、make / makefile 的理解 2.1 基本语法 2.1.1 核心框架 2.1.2 依赖关系和依赖方法 2.1.3 两者的联系 2.2 项目清理 2.3 make的执行顺序 2.4 .PHONY 伪目标 2.4.1 make 执行问题 2.4.1.1 重复问题 2.4.1.2 时间辨别操作 2.4.2 .PHONY 伪目标 作用 2.5 推导规则 三、makefile的完善操作 3.1 定义变量与引用变量 3.2 @禁止回显 3.3 自动变量 3.4 依赖关系与依赖方法的对应 3.5 多文件处理 总结)
  • [2.4 .PHONY 伪目标](#文章目录 系列文章目录 @TOC 前言 一、认识 make / makefile 1.1 make / makefile 是什么 1.2 make的概念与意义 1.3 makefile的概念和意义 1.4 两者的初步使用 二、make / makefile 的理解 2.1 基本语法 2.1.1 核心框架 2.1.2 依赖关系和依赖方法 2.1.3 两者的联系 2.2 项目清理 2.3 make的执行顺序 2.4 .PHONY 伪目标 2.4.1 make 执行问题 2.4.1.1 重复问题 2.4.1.2 时间辨别操作 2.4.2 .PHONY 伪目标 作用 2.5 推导规则 三、makefile的完善操作 3.1 定义变量与引用变量 3.2 @禁止回显 3.3 自动变量 3.4 依赖关系与依赖方法的对应 3.5 多文件处理 总结)
  • [2.4.1 make 执行问题](#文章目录 系列文章目录 @TOC 前言 一、认识 make / makefile 1.1 make / makefile 是什么 1.2 make的概念与意义 1.3 makefile的概念和意义 1.4 两者的初步使用 二、make / makefile 的理解 2.1 基本语法 2.1.1 核心框架 2.1.2 依赖关系和依赖方法 2.1.3 两者的联系 2.2 项目清理 2.3 make的执行顺序 2.4 .PHONY 伪目标 2.4.1 make 执行问题 2.4.1.1 重复问题 2.4.1.2 时间辨别操作 2.4.2 .PHONY 伪目标 作用 2.5 推导规则 三、makefile的完善操作 3.1 定义变量与引用变量 3.2 @禁止回显 3.3 自动变量 3.4 依赖关系与依赖方法的对应 3.5 多文件处理 总结)
  • [2.4.1.1 重复问题](#文章目录 系列文章目录 @TOC 前言 一、认识 make / makefile 1.1 make / makefile 是什么 1.2 make的概念与意义 1.3 makefile的概念和意义 1.4 两者的初步使用 二、make / makefile 的理解 2.1 基本语法 2.1.1 核心框架 2.1.2 依赖关系和依赖方法 2.1.3 两者的联系 2.2 项目清理 2.3 make的执行顺序 2.4 .PHONY 伪目标 2.4.1 make 执行问题 2.4.1.1 重复问题 2.4.1.2 时间辨别操作 2.4.2 .PHONY 伪目标 作用 2.5 推导规则 三、makefile的完善操作 3.1 定义变量与引用变量 3.2 @禁止回显 3.3 自动变量 3.4 依赖关系与依赖方法的对应 3.5 多文件处理 总结)
  • [2.4.1.2 时间辨别操作](#文章目录 系列文章目录 @TOC 前言 一、认识 make / makefile 1.1 make / makefile 是什么 1.2 make的概念与意义 1.3 makefile的概念和意义 1.4 两者的初步使用 二、make / makefile 的理解 2.1 基本语法 2.1.1 核心框架 2.1.2 依赖关系和依赖方法 2.1.3 两者的联系 2.2 项目清理 2.3 make的执行顺序 2.4 .PHONY 伪目标 2.4.1 make 执行问题 2.4.1.1 重复问题 2.4.1.2 时间辨别操作 2.4.2 .PHONY 伪目标 作用 2.5 推导规则 三、makefile的完善操作 3.1 定义变量与引用变量 3.2 @禁止回显 3.3 自动变量 3.4 依赖关系与依赖方法的对应 3.5 多文件处理 总结)
  • [2.4.2 .PHONY 伪目标 作用](#文章目录 系列文章目录 @TOC 前言 一、认识 make / makefile 1.1 make / makefile 是什么 1.2 make的概念与意义 1.3 makefile的概念和意义 1.4 两者的初步使用 二、make / makefile 的理解 2.1 基本语法 2.1.1 核心框架 2.1.2 依赖关系和依赖方法 2.1.3 两者的联系 2.2 项目清理 2.3 make的执行顺序 2.4 .PHONY 伪目标 2.4.1 make 执行问题 2.4.1.1 重复问题 2.4.1.2 时间辨别操作 2.4.2 .PHONY 伪目标 作用 2.5 推导规则 三、makefile的完善操作 3.1 定义变量与引用变量 3.2 @禁止回显 3.3 自动变量 3.4 依赖关系与依赖方法的对应 3.5 多文件处理 总结)
  • [2.5 推导规则](#文章目录 系列文章目录 @TOC 前言 一、认识 make / makefile 1.1 make / makefile 是什么 1.2 make的概念与意义 1.3 makefile的概念和意义 1.4 两者的初步使用 二、make / makefile 的理解 2.1 基本语法 2.1.1 核心框架 2.1.2 依赖关系和依赖方法 2.1.3 两者的联系 2.2 项目清理 2.3 make的执行顺序 2.4 .PHONY 伪目标 2.4.1 make 执行问题 2.4.1.1 重复问题 2.4.1.2 时间辨别操作 2.4.2 .PHONY 伪目标 作用 2.5 推导规则 三、makefile的完善操作 3.1 定义变量与引用变量 3.2 @禁止回显 3.3 自动变量 3.4 依赖关系与依赖方法的对应 3.5 多文件处理 总结)
  • [三、makefile的完善操作](#文章目录 系列文章目录 @TOC 前言 一、认识 make / makefile 1.1 make / makefile 是什么 1.2 make的概念与意义 1.3 makefile的概念和意义 1.4 两者的初步使用 二、make / makefile 的理解 2.1 基本语法 2.1.1 核心框架 2.1.2 依赖关系和依赖方法 2.1.3 两者的联系 2.2 项目清理 2.3 make的执行顺序 2.4 .PHONY 伪目标 2.4.1 make 执行问题 2.4.1.1 重复问题 2.4.1.2 时间辨别操作 2.4.2 .PHONY 伪目标 作用 2.5 推导规则 三、makefile的完善操作 3.1 定义变量与引用变量 3.2 @禁止回显 3.3 自动变量 3.4 依赖关系与依赖方法的对应 3.5 多文件处理 总结)
  • [3.1 定义变量与引用变量](#文章目录 系列文章目录 @TOC 前言 一、认识 make / makefile 1.1 make / makefile 是什么 1.2 make的概念与意义 1.3 makefile的概念和意义 1.4 两者的初步使用 二、make / makefile 的理解 2.1 基本语法 2.1.1 核心框架 2.1.2 依赖关系和依赖方法 2.1.3 两者的联系 2.2 项目清理 2.3 make的执行顺序 2.4 .PHONY 伪目标 2.4.1 make 执行问题 2.4.1.1 重复问题 2.4.1.2 时间辨别操作 2.4.2 .PHONY 伪目标 作用 2.5 推导规则 三、makefile的完善操作 3.1 定义变量与引用变量 3.2 @禁止回显 3.3 自动变量 3.4 依赖关系与依赖方法的对应 3.5 多文件处理 总结)
  • [3.2 @禁止回显](#文章目录 系列文章目录 @TOC 前言 一、认识 make / makefile 1.1 make / makefile 是什么 1.2 make的概念与意义 1.3 makefile的概念和意义 1.4 两者的初步使用 二、make / makefile 的理解 2.1 基本语法 2.1.1 核心框架 2.1.2 依赖关系和依赖方法 2.1.3 两者的联系 2.2 项目清理 2.3 make的执行顺序 2.4 .PHONY 伪目标 2.4.1 make 执行问题 2.4.1.1 重复问题 2.4.1.2 时间辨别操作 2.4.2 .PHONY 伪目标 作用 2.5 推导规则 三、makefile的完善操作 3.1 定义变量与引用变量 3.2 @禁止回显 3.3 自动变量 3.4 依赖关系与依赖方法的对应 3.5 多文件处理 总结)
  • [3.3 自动变量](#文章目录 系列文章目录 @TOC 前言 一、认识 make / makefile 1.1 make / makefile 是什么 1.2 make的概念与意义 1.3 makefile的概念和意义 1.4 两者的初步使用 二、make / makefile 的理解 2.1 基本语法 2.1.1 核心框架 2.1.2 依赖关系和依赖方法 2.1.3 两者的联系 2.2 项目清理 2.3 make的执行顺序 2.4 .PHONY 伪目标 2.4.1 make 执行问题 2.4.1.1 重复问题 2.4.1.2 时间辨别操作 2.4.2 .PHONY 伪目标 作用 2.5 推导规则 三、makefile的完善操作 3.1 定义变量与引用变量 3.2 @禁止回显 3.3 自动变量 3.4 依赖关系与依赖方法的对应 3.5 多文件处理 总结)
  • [3.4 依赖关系与依赖方法的对应](#文章目录 系列文章目录 @TOC 前言 一、认识 make / makefile 1.1 make / makefile 是什么 1.2 make的概念与意义 1.3 makefile的概念和意义 1.4 两者的初步使用 二、make / makefile 的理解 2.1 基本语法 2.1.1 核心框架 2.1.2 依赖关系和依赖方法 2.1.3 两者的联系 2.2 项目清理 2.3 make的执行顺序 2.4 .PHONY 伪目标 2.4.1 make 执行问题 2.4.1.1 重复问题 2.4.1.2 时间辨别操作 2.4.2 .PHONY 伪目标 作用 2.5 推导规则 三、makefile的完善操作 3.1 定义变量与引用变量 3.2 @禁止回显 3.3 自动变量 3.4 依赖关系与依赖方法的对应 3.5 多文件处理 总结)
  • [3.5 多文件处理](#文章目录 系列文章目录 @TOC 前言 一、认识 make / makefile 1.1 make / makefile 是什么 1.2 make的概念与意义 1.3 makefile的概念和意义 1.4 两者的初步使用 二、make / makefile 的理解 2.1 基本语法 2.1.1 核心框架 2.1.2 依赖关系和依赖方法 2.1.3 两者的联系 2.2 项目清理 2.3 make的执行顺序 2.4 .PHONY 伪目标 2.4.1 make 执行问题 2.4.1.1 重复问题 2.4.1.2 时间辨别操作 2.4.2 .PHONY 伪目标 作用 2.5 推导规则 三、makefile的完善操作 3.1 定义变量与引用变量 3.2 @禁止回显 3.3 自动变量 3.4 依赖关系与依赖方法的对应 3.5 多文件处理 总结)
  • [总结](#文章目录 系列文章目录 @TOC 前言 一、认识 make / makefile 1.1 make / makefile 是什么 1.2 make的概念与意义 1.3 makefile的概念和意义 1.4 两者的初步使用 二、make / makefile 的理解 2.1 基本语法 2.1.1 核心框架 2.1.2 依赖关系和依赖方法 2.1.3 两者的联系 2.2 项目清理 2.3 make的执行顺序 2.4 .PHONY 伪目标 2.4.1 make 执行问题 2.4.1.1 重复问题 2.4.1.2 时间辨别操作 2.4.2 .PHONY 伪目标 作用 2.5 推导规则 三、makefile的完善操作 3.1 定义变量与引用变量 3.2 @禁止回显 3.3 自动变量 3.4 依赖关系与依赖方法的对应 3.5 多文件处理 总结)

前言

本节将围绕文件的快速处理的知识点展开的,主要内容为makefile的使用,实现高效地编译代码,让我们开始今天的学习吧。


一、认识 make / makefile

1.1 make / makefile 是什么

总的来说: make是⼀条命令,makefile是⼀个⽂件,两个搭配使⽤,完成项⽬⾃动化构建。make命令是在makefile的基础上实现的,可以说两者互相依存,不分彼此。

1.2 make的概念与意义

make:是一个自动化构建工具,其核心功能是"自动判断大型程序中哪些部分需要重新编译,并执行相应的命令来完成这些编译工作

make是⼀个命令⼯具,是⼀个解释makefile中指令的命令⼯具,⼀般来说,⼤多数的IDE都有这个命令,⽐如:Delphi的make,VisualC++的nmake,Linux下GNU的make。

1.3 makefile的概念和意义

Makefile: 是一个文本文件,其中包含了构建项目所需的规则。当您在命令行中键入 make 命令时,程序便会读取并解析这个文件来执行任务。

makefile带来的好处就是⸺"⾃动化编译",⼀旦写好,只需要⼀个make命令,整个⼯程完全⾃动编译,极⼤的提⾼了软件开发的效率。因此可以实现大量文件的便捷编译,不需要对每个文件单独处理。

1.4 两者的初步使用

如下,是使用makefile和make的具体方法:

首先,我们要先创建makefile文件,创建时可以忽略开头首字母的大小写

接着,使用vim打开该文件,并且编辑文件,如图:第一行是形成文件:依靠文件,
第二行是 :Tab + 如何通过依靠文件创建形成文件。

最后,退出文件,在makefile文件的同级目录下使用make命令就可以形成code文件了。


二、make / makefile 的理解

2.1 基本语法

2.1.1 核心框架

对于makefile文件的使用离不开两点:

  • 目标: 即要实现的目的,不仅可以充当标识符,还能够说明要求。
  • 依赖: 分为依赖关系和依赖方法,两者是够成makefile的关键。

2.1.2 依赖关系和依赖方法

在图中我们必须理解两个概念,第一行是依赖关系,第二行是依赖方法。

  1. 依赖关系:
      在图中的代码code : code.c冒号左边为要形成的文件即目标,冒号右边为形成目标文件所需的原料,这两者构成依赖关系
  • 基本原理: 回答编译时,什么 是怎么产生的关系。
  • 类比: 儿子给父亲打电话,说:爸,你好。这就确立了明确的依赖关系。
  1. 依赖方法:
  • 基本原理: 处理关系之间的行为方法,即回答如何做。
  • 类比: 在儿子与父亲表明关系后,是要说自己的目的的,不然打电话干嘛?就是要生活费的行为。

2.1.3 两者的联系

我们从上面的类比反向思考,没有关系、没有方法就实现不了目的吗?可以说:两者只有缺少一个就不可能实现**只有关系,没有方法就要不到钱;只有方法,没有关系也要不到钱。总的来说,依赖关系和依赖方法是必须相符合的,而且必须同时存在,才能够实现目标。**

2.2 项目清理

文件既然可以通过这样创建,当然也可以通过其来清理。

通过make clean 来执行项目清理,我们发现clean:,它并不像上面的代码,这是因为clean 是不需要依赖的,它本身就是一个实现操作 。当然,如果冒号后面跟着文件,系统也会先检查该文件的内容,再执行方法,没有就会直接执行方法。

我们还会发现它还有多的一行:.PHONY,这是设置伪目标的操作,它的作用为强制执行,这一点后面会讲。

2.3 make的执行顺序

直接使用make指令时,它会在makefile文件中自上而下的查找要实现的目标,并且默认执行的是第一个目标,当形成文件不是第一个时就需要make code 来形成文件。

2.4 .PHONY 伪目标

2.4.1 make 执行问题

2.4.1.1 重复问题

我们在使用make时,发现多次使用系统不会再帮我们生成文件,这是因为系统会自己会检查源代码是否被重写,如果被改才会重新编译,这是为了方便使用减少操作。

2.4.1.2 时间辨别操作

从上面可知,系统会自动判断文件是否修改,那它是怎么实现这一操作的?其实与之前我们讲的时间有关,让我们先认识文件具有哪些时间属性吧。

通过stat + 可执行文件 来查看一个文件的属性,可以看见里面存在三个时间分别为:Access、Modify、Change。

  • Access: 与查看文件有关,因效率问题会累计一段时间后才会变化
  • Modity: 与修改文件内容有关,只要文件的内容改变其时间就会变化
  • Change: 与修改文件属性有关,如文件的大小、查看时间、权限位等变化就会变化

因此系统就会根据Modify 时间来进行判断,并且两者的时间必定会有新旧。

tips: touch 文件 可以修改文件的时间

2.4.2 .PHONY 伪目标 作用

.在一个makefile文件当中,我们几乎都会使用.PHONY。现在我们来认识一下它吧。

  • 伪目标: 伪目标是一个不代表真实文件的目标,它只是为了执行一系列命令而存在
  • 特点: 总是被执行,忽略对比Modify时间
  • 用途: 如果我们想依靠makefile实现指令的快速使用,它的存在就可以让系统忽略依赖文件直接执行命令,并且附有的总是执行的特点,更是能确保命令的多次执行。

2.5 推导规则

形成的code执行文件,其实依赖的时code.o 文件,而.o 需要 .i ,而 .i 需要 .s,.s需要.c,所以形成执行文件的过程是需要一步步由源文件推导形成的,如图:

而形成这样的文件是如何推导出来的呢?其实makefile存在一个类似栈的结构 ,从上到下读取文件时,发现 执行依赖.o,而并没有.o文件,所以就会把依赖方法存入到栈底。然后继续进行以上操作,直到发现目录中存在.c文件时就会执行它的依赖方法,并把栈中的方法出栈并执行。从而实现,从上到下扫描、从下到上执行的过程。


三、makefile的完善操作

接下来我们来学习makefile的其他操作。

3.1 定义变量与引用变量

  1. 定义变量: makefile中也可以直接定义变量,以便对配置的全局修改。使用 变量 = 数据的方式定义一个变量。

在makefile中 =:= 之间存在区别,前者为递归展开,而后者为简单展开,我们之后在学,初学者可以直接使用 = 来符合我们的书写逻辑

  1. 引用变量: 使用$(变量名),进行替换,类似宏定义,可以实现全局配置。

根据以上的两种语法我们可以实现,文件的简易配置编译,以后只要修改定义就可以直接改变要编译的变量。

3.2 @禁止回显

该符号能够使打印时不回显打印的命令行,只保留要打印的内容。(带上@符号后,就只会显示code)

3.3 自动变量

使用makefile时常常写依赖关系时显得繁琐,那有没有便捷的写法?有的,makefile中可以通过某些标号直接代替关系中的两者,这就是自动变量。

  • $@ :代替依赖关系冒号前方的变量
  • $^:代替依赖关系冒号后面的变量

3.4 依赖关系与依赖方法的对应

一个依赖关系可以对应多个依赖方法

3.5 多文件处理

我们这样处理一个文件固然简单方便,但是如果有100多个源文件(.c)那该怎么形成一个可执行文件呢?

我们可以使用makefile中的类似通配符的语法即%.名称,它与.*的作用相似,都是匹配同名称文件,因此有:

  • %.o : %.c : 把当前路径下的使用.o文件 / .c 文件依次展开
  • $<: 依赖关系里的第一个依赖文件

这样我们就剩下了依赖文件的写入了,当然这个也有便捷写法。

  • *SRC=$(shell ls .c) : 即在运行时调用ls .*命令从而将所有的.c文件写入到SRC当中
  • *SRC=$(wildcard .c): makefile还有自带函数,也是默认将当前目录中文件获取
  • OBJ=$(SRC:.c=.o): 把 SRC 变量里所有 .c 结尾的文件名,批量替换成 .o 结尾的目标文件名

这样就能将所有的汇编文件链接到一起,从而形成可执行文件。


总结

这就是makefile要掌握的重点内容了,下一节我们将通过现有的开发工具实现一个小程序,感谢您的阅读。

相关推荐
vortex51 小时前
现代 Linux 包管理全景:从 apt 到 Nix,四大派系与四大范式
linux·运维·服务器
hwscom1 小时前
Windows服务器如何免费实现文件防篡改功能
运维·服务器·windows
HMS工业网络1 小时前
STP、RSTP到N-Ring的演进之路
服务器·开发语言·php
ID_180079054731 小时前
企业级淘宝评论 API最简说明,JSON 返回示例
java·服务器·前端
无情的西瓜皮1 小时前
MCP协议实战:从零搭建一个AI Agent工具服务器,让大模型真正“动手干活“
运维·服务器·人工智能·mcp
历程里程碑1 小时前
54 深入解析poll多路复用技术
java·linux·服务器·开发语言·前端·数据结构·c++
Irene19911 小时前
Linux 默认权限详解:目录(755)与普通文件(644)权限机制,默认权限由 umask 值决定
linux·权限位
qq_543447821 小时前
Tcping测速是什么?Tcping测速核心概念解析
服务器·网络·php
上海云盾-小余2 小时前
验证码接口攻防实战:杜绝拖拽刷量引发服务器瘫痪
运维·服务器