![](https://img-blog.csdnimg.cn/20190918140129601.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Makefile
make及makefile专题
浅若如初
行则将至
展开
-
第19课 - 路径搜索的综合示例
文章目录1. 需求分析2. 项目类型分析3. 需要使用的预定义函数4. 示例Demo5. 总结1. 需求分析工程项目中不希望源码文件夹在编译时被改动 ( 只读文件夹 )在编译时自动创建文件夹 ( build ) 用于存放编译结果编译过程中能够自动搜索需要的文件makefile 易于扩展,能够复用相同类型的项目支持调试版本的编译选项2. 项目类型分析3. 需要使用的预定义函数$(wildcare $(DIR)/_pattern) 用于获取 $(DIR) 文件夹中满足_pattern原创 2020-06-07 07:23:19 · 123 阅读 · 0 评论 -
第18课 - make 中的路径搜索(下)
文章目录1. VPATH 和 vpath 同时存在如何选择2. 多个vpath下存在相同的文件3. 目标文件的生成位置4. 总结与建议1. VPATH 和 vpath 同时存在如何选择文件结构:VPATH := src1CFLAGS := -I incvpath %.c src2vpath %.h incapp.out : func.o main.o @gcc -o $@ $^ @echo "Target File ==> $@"%.o : %.c func.h @gcc原创 2020-06-06 17:34:39 · 195 阅读 · 0 评论 -
第17课 - make 中的路径搜索(上)
文章目录1. 思考案例2. VPATH 预定义变量对案例1改造3. vpath关键字4. 总结1. 思考案例文件目录展示:OBJS := func.o main.ohello.out : $(OBJS) @gcc -o $@ $^$(OBJS) : %.o : %.c func.h @gcc -o $@ -c $<思考上面的makefile 能够成功编译吗?不能,因为头文件和源文件不在当前目录下,并且我们没有指定他的目录2. VPATH 预定义变量对案例1改造特殊的预原创 2020-06-06 16:15:42 · 176 阅读 · 0 评论 -
第16课 - make 的隐式规则(下)
文章目录1. make 的隐式规则2. 后缀规则匹配3. 总结1. make 的隐式规则深入理解隐式规则:当make 发现目标的依赖不存在时,尝试通过依赖名逐一查找隐式规则,并且通过依赖名推导可能需要的源文件隐式规则的副作用:编译行为难以控制:大量使用隐式规则可能产生意想不到的编译行为编译效率低下:make 从隐式规则和自定义规则中选择最终使用的规则隐式规则链:当依赖的目标不存在时,make 会极力组合各种隐式罪责对目标进行创建,进而产生意料之外的编译行为需要 N.o 的目原创 2020-06-04 20:24:54 · 161 阅读 · 0 评论 -
第15课 - make 的隐式规则(上)
文章目录1. 目标拆分2. 初探隐式规则3. 总结1. 目标拆分mekefile 中出现同名目标时依赖:所有的依赖将合并在一起,成为目标的最终依赖命令:当多处出现同一目标的命令时,make发出警告,所有之前的命令将被最后定义的命令覆盖EG:all : @echo "the one all"all : @echo "the two all"all : @echo "the three all"执行结果:2. 初探隐式规则什么是隐式规则?make 提供了一些常用的,原创 2020-06-04 15:58:52 · 163 阅读 · 0 评论 -
第14课 - 自动生成依赖关系(续)
文章目录1. 自动生成依赖关系1. 自动生成依赖关系代码:.PHONY : all clean rebuildMKDIR := mkdirRM := rm -frCC := gccDIR_DEPS := depsDIR_EXES := exesDIR_OBJS := objsDIRS := $(DIR_DEPS) $(DIR_EXES) $(DIR_OBJS)EXE := app.outEXE := $(addprefix $(DIR_EXES)/, $(EXE))SRC原创 2020-06-04 14:17:29 · 240 阅读 · 0 评论 -
13-自动生成依赖关系(下)
文章目录1. 组织 .dep 文件到指定目录2. include 暗黑操作2.1 include 暗黑操作12.2 include 暗黑操作二:2.3 include 暗黑操作三2.4 include 总结1. 组织 .dep 文件到指定目录解决思路:-当 include 发现 .dep 文件不存在时 1. 通过股则和命令创建 deos 文件 2. 将所有 .dep 文件创建到 deps文件夹初步代码设计.PHONY : all cleanMKDIR := mkdirRM := rm原创 2020-06-04 11:20:24 · 161 阅读 · 0 评论 -
12-自动生成依赖关系(中)
文章目录1. include 关键字2. 示例分析3. 自动生成依赖关系的初步方案1. include 关键字makefile 中的 include 关键字+ 类似C语言中的 include将其它文件的内容原封不动的搬入当前文件语法: inlcude foo.make // 将 foo.make 文件中的内容搬入此makefile我呢见 include *.mk // 将以mk结尾的文件搬入此 makefile 文件中 include $(var) // 使用变量代替文件名mka原创 2020-06-04 10:01:48 · 289 阅读 · 0 评论 -
11-自动生成依赖关系(上)
文章目录1. 头文件依赖1.1 头文件带来的思考1.2 示例分析2 自动生成依赖关系2.1 疯狂的想法2.2 预备工作2.2.1 Linux 中的 sed2.2.2 gcc 编译选项2.2.3 拆分目标文件1. 头文件依赖1.1 头文件带来的思考.o文件并不仅仅依赖源文件,也有可能依赖头文件预处理器将头文件中的代码直接插入源文件,编译器只通过源文件通过预处理后的源文件产生目标文件,因此规则中仅仅以源文件作为依赖,当被依赖的头文件被修改后,命令可能无法执行1.2 示例分析思考下面的 makef原创 2020-06-04 09:17:51 · 233 阅读 · 0 评论 -
13-自动生成依赖关系(下)
文章目录1. 组织生成的依赖文件2. include 关键字不为人知的秘密2.1 include 暗黑操作一2.2 include 暗黑操作二2.3 include 暗黑操作三3. include 总结1. 组织生成的依赖文件通过规则和命令创建 deps 文件将所有 .dep 文件创建到 deps 文件夹.dep 文件中记录目标文件的依赖关系.PHONY : all cleanM...原创 2020-04-13 18:46:34 · 238 阅读 · 0 评论 -
12-自动生成依赖关系(中)
文章目录1. include关键字2. makefile 中命令的执行机制3. 自动生成依赖关系的初步探索1. include关键字makefile 中的 include 关键字:类似 C 语言中的 include将其它文件的内容原封不动的搬入当前文件make 对 include 关键字的处理方式:在当前目录搜索或指定目录搜索目标文件搜索成功,将文件内容搬入当前文件中搜索失...原创 2020-04-13 17:24:26 · 193 阅读 · 0 评论 -
11-自动生成依赖关系(上)
文章目录1. .o文件的依赖2. 自动生成依赖关系的预备工作2.1 Linux 命令 sed (了解即可)2.2 gcc 关键字编译选项3. 拆分目标依赖1. .o文件的依赖场景:在以上场景中分析下面代码时候有问题:OBJS := func.o main.ohello.out : $(OBJS) @gcc -o $@ $^ @echo "TargetFile ==> $...原创 2020-04-13 15:48:33 · 204 阅读 · 0 评论 -
10- 变量与函数的综合示例
文章目录1. 实战前的分析2. 实战演练3. 总结1. 实战前的分析实战需求:自动生成 target 文件夹存放可执行文件自动生成 objs 文件夹存放编译生成的目标文件 (*.o)支持调试版本的编译选项考虑代码的扩展性工具原料:$(wildcard pattern)-获取当前工作目录中满足 pattern 的文件或者目录列表$(addprefix prefix,names...原创 2020-04-12 13:47:55 · 195 阅读 · 0 评论 -
09-函数定义及调用
文章目录1. makefile 中自定义函数2. 预定义函数3. 自定义函数与预定义函数的区别4. 总结1. makefile 中自定义函数makefile 中支持函数的概念:make 解释器提供了一些列的函数供 makefile 调用在 makefile 中支持自定义函数的实现,并调用执行通过 define 关键字实现自定义函数自定义函数示例:define func1 @ec...原创 2020-04-11 21:55:56 · 131 阅读 · 0 评论 -
08-条件判断语句
文章目录1. 条件判断语句2. 工程经验3. 代码分析4. 总结1. 条件判断语句makefile 中支持条件判断语句:可以根据条件的值来决定 make 的执行可以比较两个不同变量或者变量和常量值注意事项:条件判断语句只能用于控制 make 实际执行的语句,不可以控制规则中命令的执行过程# 条件判断语句的常用格式-ifXXX (arg1,arg2)# 其它合法形式(了解)-...原创 2020-04-11 20:25:10 · 180 阅读 · 0 评论 -
07- 变量的高级主题(下)
文章目录1. 环境变量1.1 makefile 中能够直接使用环境变量的值:1.2 为什么要在 makefile 中使用环境变量?1.3 变量在不同 makefile 之间的传递2. 目标变量( 局部变量 )3. 模式变量4. 总结1. 环境变量1.1 makefile 中能够直接使用环境变量的值:定义了同名变量,环境变量将被覆盖运行 make 时指定 -e 选项,优先使用环境变量H...原创 2020-04-11 17:10:05 · 86 阅读 · 0 评论 -
06- 变量的高级主题(上)
文章目录1. 变量的后缀替换2. 变量的模式替换3. 规则中的模式替换4. 变量值的嵌套引用5. 命令行变量6. define 关键字7. override关键字8. 总结9. 总结1. 变量的后缀替换使用指定字符串替换变量值中的后缀字符串语法格式 $(var:a=b) 或 ${var:a=b} ,替换表达式中不能有任何空格make 中支持使用${} 对变量进行取值src := a....原创 2020-04-11 15:48:57 · 103 阅读 · 0 评论 -
05-预定义变量的使用
文章目录1. 预定义变量2.自动变量的意义3. 特殊变量的含义(不是所有)4. 总结1. 预定义变量在 makefile 中存在一些预定义的变量:自动变量:$@ $^ $<特殊变量:$(MAKE) $(MAKECMDGOALS) $(MAKEFILE_LIST) $(CURDIR) $(.VARIABLES) 等2.自动变量的意义$@ 当前规则中触发命令被执行的...原创 2020-04-11 12:33:37 · 1124 阅读 · 0 评论 -
04-变量和不同的赋值方式
文章目录1. makefile 中的变量2. makefile 中变量的赋值方式2.1 简单赋值 ( := )2.2 递归赋值 ( = )2.3 条件赋值 ( ?= )2.4 追加赋值 ( += )3. 总结1. makefile 中的变量makefile 中支持程序设计语言中变量的概念makefile 中的变量只代表文本数据(字符串)makefile 中的变量名规则:变量名可以包含字符...原创 2020-04-10 17:45:09 · 1028 阅读 · 0 评论 -
03-伪目标的引入
文章目录1. 伪目标的作用2. 伪目标的妙用3. 绕开关键字 .PHONY 关键字定义伪目标4. 总结1. 伪目标的作用默认情况下:make 认为目标对应着一个文件make 比较目标文件和依赖文件的新旧关系,决定是否执行命令make 以文件处理作为第一优先级clean : rm *.o hello.out上面一段 makefile 脚本的目的是清除目标文件及中间文件,但是如果...原创 2020-04-10 16:58:38 · 128 阅读 · 0 评论 -
02- 初识 makefile 的结构
文章目录1. makefile中元素的含义2. makefile 依赖3. makefile 编程案例4. 总结1. makefile中元素的含义makefile 用于定义源文件之间的依赖关系makefile 说明如何编译各个源文件并生成可执行文件targets : - 通常是需要生成的目标文件名 - make 所需执行的命令名称prerequisities : ...原创 2020-04-10 11:15:16 · 111 阅读 · 0 评论 -
01-make 和 makefile
文章目录1. 什么是make2. 什么是makefile3. make和makefile之间的关系4. make和makefile示例4.1 最简答的mekefile示例4.2 make程序的使用示例4.3 make 程序的简写5. 总结1. 什么是makemake是一个应用程序:解析源程序之间的依赖性根据依赖关系自动维护编译工作执行宿主操作系统中的各种命令2. 什么是makefi...原创 2020-04-10 09:56:43 · 157 阅读 · 0 评论