随笔分类 - 一步一步深入Makefile
摘要:第19课 - 路径搜索的综合示例 1. 需求分析 (1)工程项目中不希望源码文件夹在编译时被改动(只读文件夹) (2)在编译时自动创建文件夹(build)用于存放编译结果 (3)编译过程中能够自动搜索需要的文件 (4)makefile 易于扩展,能够复用于相同类型的项目 (5)支持调试版本的编译选项
阅读全文
摘要:第18课 - make 中的路径搜索(下) 1. 问题一 当 VPATH 和 vpath 同时出现,make 会如何处理? 工程项目的目录结构如下图所示,src1 和 src2 中都包含了 func.c 文件,如果在 makefile 中使用 VPATH 指定了 src1 ,使用 vpath 指定了
阅读全文
摘要:第17课 - make 中的路径搜索(上) 1. 问题 在以往的 make 学习中,我们使用到的 .c 文件和 .h 文件都与 makefile 处在同一个路径。在实际的工程项目中,所有的源文件和头文件都放在同一个文件夹中吗? 答案毋庸置疑是否定的,在实际的工程项目中,源文件和头文件的数量可能是成千
阅读全文
摘要:第16课 - make的隐式规则(下) 1
阅读全文
摘要:第15课 - make的隐式规则(上) 1. 问题 如果把同一个目标的命令拆分的写到不同地方,会发生什么? 执行make all 这个实验表明了:如果同一个目标的命令拆分的写到不同地方,那么 make 会覆盖之前的目标对应的命令,使用最新出现的目标对应的命令。 makefile 中出现同名目标时 —
阅读全文
摘要:第12课 - 自动生成依赖关系(中) 未完待续。
阅读全文
摘要:第11课 - 自动生成依赖关系(上) 1. 值得思考的问题 (1)目标文件(.o)是否只依赖于源文件(.c)? (2)编译器如何编译源文件和头文件? 2. 编译行为带来的缺陷 (1)预处理器将头文件中的代码直接插入源文件 (2)编译器只通过预处理后的源文件产生目标文件 综合上面两点,规则中以源文件为
阅读全文
摘要:第10课 - 变量与函数的综合示例 1. 实战需求 (1)自动生成 target 文件夹存放可执行文件 (2)自动生成 objs 文件夹存放编译生成的目标文件(*.o) (3)支持调试版本的编译选项 (4)考虑代码的扩展性 ——> 使用变量 2. 工具原料 — $(wildcard _pattern
阅读全文
摘要:第9课 - 函数定义及调用 1. makefile中的函数 (1)make 解释器提供了一系列的函数供 makefile 调用 (预定义函数) (2)在 makefile 中支持自定义函数实现,并调用执行 (自定义函数) (3)通过 define 关键字实现自定义函数 2. 在 makefile 中
阅读全文
摘要:第8课 - 条件判断语句 1. makefile中的条件判断语句 (1)makefile 中支持条件判断语句 — 可以根据条件的值来决定 make 的执行 — 可以比较 两个不同变量 或者 变量和常量值 方法 ifxxx (arg1,arg2) # for true else # for false
阅读全文
摘要:第7课 - 变量的高级主题(下) 1. makefile中的环境变量(全局变量) (1)makefile中使用系统环境变量 makefile中可以直接使用系统中的环境变量(系统环境变量的本质就是全局的键值对) 如果 makefile 中定义了同名变量,那么环境变量将会被覆盖 运行 make 时指定
阅读全文
摘要:第6课 - 变量的高级主题(上) 1. makefile中变量的替换 1.1 变量值的普通替换 (1)使用指定字符(串)替换变量值中的后缀字符(串) (2)语法格式: $(var:a=b) 或 ${var:a=b} 替换表达式中不能有任何的空格 make 中支持使用 ${} 对变量进行取值 替换表达
阅读全文
摘要:第5课 - 预定义变量的使用 1. makefile中的预定义变量 (1)自动变量 $@ @^ @< $@ @^ @< (2)特殊变量 $(MAKE) , $(MAKECMDGOALS) , $(MAKEFILE_LIST) $(MAKE_VERSION) , $(CURDIR) , $(.VARI
阅读全文
摘要:第4课 - 变量和不同的赋值方式 1. makefile中的变量 (1)makefile 中支持程序设计语言中变量的概念 (2)makefile 中的变量只代表文本数据(字符串) (3)makefile 中的命名规则 — 变量名可以包含字符 , 数字 , 下划线 — 不能包含 ":" , "#" ,
阅读全文
摘要:第3课 - makefile伪目标的引入 1. makefile 中的目标究竟是什么? (1)默认情况下,make 认为目标对应着一个文件 ==> 目标即文件名 (2)make 首先会检测目标对应的文件是否存在,若不存在则执行依赖和命令。若存在则会比较目标文件和依赖文件的新旧关系,决定是否执行命令。
阅读全文
摘要:第2课 - 初识makefile的结构 1. makefile 的意义 (1)makefile 用于定义源文件之间的依赖关系 (在阅读开源软件源码时,可通过Makefile掌握源码中各个文件之间的关系) (2)makefile 说明如何编译各个源文件并生成可执行程序 2. makefile 的规则
阅读全文
摘要:第1课 - make 和 makefile 1. make make 是一个应用程序,位于 /usr/bin/make 目录下,make 有如下的功能: (1)解析源程序之间的依赖关系 (2)根据依赖关系自动维护编译工作 (3)执行宿主操作系统中的各种命令 2. makefile makefile
阅读全文