![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
makefile
文章平均质量分 80
qq_34738528
这个作者很懒,什么都没留下…
展开
-
3.伪目标的引入
目录1.默认情况下2.下面的代码有什么意义?3.有趣的目标4.makefile中的伪目标5.伪目标的语法:先声明,后使用6.伪目标的妙用:规则调用(函数调用)7.技巧:绕开.PHONY关键字定义伪目标8.小结思考makefile中的目标究竟是什么?1.默认情况下make认为目标对应着一个文件 make比较目标文件和依赖文件的新旧关系,决定是否执行命令...原创 2019-07-17 19:50:58 · 72 阅读 · 0 评论 -
2.初识makefile结构
目录1.makefile的意义2.依赖定义3.规则中的注意事项4.第一个make的编译案例5.小技巧6.初探make编译7.小结1.makefile的意义makefile用于定义源文件的依赖关系makefile说明如何编译各个源文件并生成可执行文件2.依赖定义targets:prerequisites;command1 command2...原创 2019-07-17 19:40:28 · 146 阅读 · 0 评论 -
24.第三方库的使用支持
1.问题当需要使用第三方库文件时,编译环境中的makefile该如何修改?2.经验假设第三方库通过函数调用的方式提供库中的功能 库文件发布时都附带了声明库函数原型的头文件 搬移阶段使用头文件,链接阶段使用库文件3.第三方库在项目中的位置第三方库的编译阶段支持定义变量DIR_LIBS_INC用于指示头文件的存储位置使用DIR_LIBS_INC提示ma...原创 2019-07-24 15:19:25 · 207 阅读 · 0 评论 -
23.模块独立编译的支持
目录1.问题2.问题背景3.解决方案4.关键技术点5.makefile中代码复用6.思路7.小结1.问题一般而言,不同工程师负责不同模块的开发;编译环境中如何支持模块的独立编译?2.问题背景大型项目的代码文件成千上万,完整编译的时间较长 编写模块代码时,可通过编译检查语法 为了提高开发效率,需要支持指定模块的独立编译示例:3.解...原创 2019-07-24 15:16:53 · 150 阅读 · 0 评论 -
22.打造专业的编译环境(下)
目录1.问题:2.问题一3.解决方案4.问题二5.解决方案6.关键问题7.工程makefile的重构8.小结1.问题:当前整个项目的makefile是否存在潜在的问题?是否需要重构?2.问题一所有模块makefile中使用的编译路径均为写死的绝对路径,一旦项目文件夹移动,编译必将失败!3.解决方案在工程makefile中获取项目的源...原创 2019-07-24 15:04:40 · 284 阅读 · 0 评论 -
1.make和makefile
目录1.make是一个应用程序2.makefile是一个描述文件3.make和makefile之间的关系4.最简单的makefile示例5.make程序的使用示例6.小结1.make是一个应用程序解析源程序之间的依赖关系 根据依赖关系自动维护编译工作 执行数组操作系统中中的各种命令2.makefile是一个描述文件定义一系列的规则来指定源文件编译的先后顺...原创 2019-07-17 11:11:42 · 135 阅读 · 0 评论 -
14.自动生成依赖关系
目录1.疯狂想法的具体实现2.注意事项3.解决方案4.小结1.疯狂想法的具体实现2.注意事项当.dep文件生成后,如果动态的改变头文件间的依赖关系,那么make可能无法检测到这个改变,进而做出错误的编译决策3.解决方案将依赖文件名作为目标加入生成的依赖关系中 通过include加载依赖文件时判断是否执行 在规则执行时重新生成依赖关系文件 最后加载...原创 2019-07-19 11:08:52 · 155 阅读 · 0 评论 -
13.自动依赖生成关系(下)
目录1.问题2.解决思路3.初步的代码设计4.不是问题的问题5.问题本质分析6.解决方案优化7.include暗黑操作一:8.include暗黑操作二9.include暗黑操作三10.关于include的总结一11.关于include的总结二12.关于include的总结三1.问题如何在makefile中组织.dep文件到指定目录?...原创 2019-07-19 10:06:50 · 225 阅读 · 0 评论 -
4.变量和不同的赋值方式
目录1.变量的定义和使用2.makefile中变量的赋值方式2.1简单赋值(:=)2.2递归赋值(=)2.3.条件赋值(?=)2.4追加赋值(+=)2.5小结makefile中支持程序设计语言中变量的概念 makefile中的变量值代表文本数据(字符串) makefile中的变量名规则 变量名可以包含字符,数字,下划线...原创 2019-07-17 20:00:09 · 232 阅读 · 0 评论 -
17.make中的路径搜索(上)---源文件头文件分离及路径搜索示例
目录1.常用的源码管理方式2.下面的makefile能够成功编译吗?3.特殊的预定义变量VPATH(全大写)4.make对于VPATH值的处理方式5.VPATH存在的问题6.替换方案:vpath关键字(全小写)7.取消搜索规则8.小结问题 在实际的工程项目中,所有的源文件和头文件都放在同一文件夹中吗?1.常用的源码管理方式2.下面...原创 2019-07-22 10:30:30 · 230 阅读 · 1 评论 -
21.打造专业的编译器环境(中)
目录1.第二阶段任务2.关键的实现要点3.开发中的经验假设4.解决方案设计5.makefile中嵌入shell的for循环6.注意事项7.工程makefile中的关键构成8.链接时注意事项综合1.第二阶段任务完成编译整个工程的makefile文件调用模块makefile编译生成静态库文件链接所有模块的静态文件,最终得到可执行程序2....原创 2019-07-23 09:42:42 · 201 阅读 · 0 评论 -
makefile常用工具原料
工具原料1$(wildcard _pattern) 获取当前工作目录满足_pattern的文件或者目录列表$(addprefix _prefix,_names) 给名字列表_name中的每一个名字增肌前缀_prefix关键技巧1.自动获取当前目录下的原文件列表(函数调用)2.根据源文件列表生成目标文件列表(变量的值替换)...原创 2019-07-22 14:56:18 · 282 阅读 · 0 评论 -
20.打造专业的编译器环境(上)
目录1.大型项目的目录结构(无第三方库)2.项目架构设计分析3.需要打造的编译环境4.解决方案设计5.第一阶段任务:6.关键的实现要点7.模块makefile中的构成1.先编写common对应的makefile注释1.大型项目的目录结构(无第三方库)2.项目架构设计分析项目被划分多个不同模块 每个模块的代码用一...原创 2019-07-22 13:47:16 · 273 阅读 · 0 评论 -
19.路径搜索的综合示例
目录1.需求分析2.项目类型分析3.工具原料4.关键技巧5.编译规则的依赖6.值得斟酌的问题7.小结1.需求分析工程项目中不希望源码文件夹在编译时被改动(只读文件夹) 在编译时自动创建文件夹(build)用于存放编译结果 编译过程中能够自动搜索需要的文件 makefile易于扩展,能够复用于相同类型的项目 支持调试版本的编译选项2.项目类型分析...原创 2019-07-22 10:56:36 · 114 阅读 · 0 评论 -
18.make中的路径搜索(下)
目录1.问题一:2.下面的项目中会选择哪一个文件进行编译?3.实验结论4.问题二5.下面的项目中会选择哪一个文件进行编译?6.实验结论7.问题三8.下面的项目中将如何生成可执行程序?9.实验结论10.问题11.解决方案12.工程项目中的几点建议1.问题一:当VPATH和vpath同时出现时,make会如何处理?2.下面的项目中会...原创 2019-07-22 10:47:49 · 127 阅读 · 0 评论 -
15.make的隐士规则(上)----命令重复和预定义变量
目录1.下面的程序怎么执行?为什么?2.makefile中出现同名目标时3.注意事项3.什么是隐士规则(built-in rules)4.下面的makefile能成功编译吗?为什么?5.初探隐士规则6.小结问题 如果同一个目标的命令拆分的写到不同地方,会发生什么?1.下面的程序怎么执行?为什么?2.makefile中出现同名目标...原创 2019-07-22 09:46:25 · 251 阅读 · 0 评论 -
16.make的隐士规则(下)
目录1.深入理解隐士规则2.隐士规则的副作用3.隐士规则链4.问题5.查看隐士规则6.隐士规则的禁用7.后缀规则简介8.双后缀规则9.单后缀规则10.关于后缀规则的注意事项11.小结1.深入理解隐士规则当make发现目标的依赖不存在时 尝试通过依赖名逐一查找隐士规则 并且通过依赖...原创 2019-07-22 09:59:18 · 154 阅读 · 0 评论 -
12.自动生成依赖关系(中)---(-MM include sed初探)
目录1.makefile中的include关键字2.make对include关键字的处理方式3.下面的代码怎么执行?为什么?4.makefile中命令的执行机制5.下面的代码想要实现的功能?有没有问题?6.解决方案的初步思路1.makefile中的include关键字类似C语言中的include 将其他文件的内容原封不动的搬入当前文件2.make对in...原创 2019-07-19 09:54:42 · 143 阅读 · 0 评论 -
11.自动生成依赖关系(上)--(-MM sed)
目录1.值得思考的问题2.编译行为带来的缺陷3.下面的makefile有没有问题?4.实验中解决方案的问题5.疯狂的想法6.预备工作(原材料)7.Linux中的sed命令8.sed的正则表达式支持9.gcc关键编译选项10.小技巧:拆分目标的依赖1.值得思考的问题目标文件(.o)是否只依赖源文件(.c)? 编译器如何编译源文件和头文件?...原创 2019-07-19 09:44:22 · 180 阅读 · 0 评论 -
10.变量与函数的综合示例--初步分目录管理
目录1.实战需求2.工具原料3.关键技巧4.规则中的模式替换(目录结构)5.编译规则的依赖6.小结1.实战需求自动生成target文件夹存放可执行文件 自动生成objs文件夹存放编译生成的目标文件 支持调试版本的编译选项 考虑代码的扩展性2.工具原料$(wildcard _pattern) 获取当前工作目录满足_...原创 2019-07-18 10:21:37 · 84 阅读 · 0 评论 -
9.函数定义及调用
目录1.makefile中支持函数的概念2.自定义函数的语法3.深入理解自定义函数4.make解释器中的预定义函数5.预定义函数的调用6.问题7.本质剖析8.小结1.makefile中支持函数的概念make解释器提供了一系列的函数供makefile调用 在makefile中支持自定义函数实现并调用执行 通过define关键字实现自定义函数2.自定...原创 2019-07-18 10:13:36 · 149 阅读 · 0 评论 -
8.条件判断语句
目录1.makefile中支持条件判断语句2.注意事项3.条件判断语句的语法说明4.条件判断关键字5.一些工程经验6.下面的代码的输出相同吗?7.小结1.makefile中支持条件判断语句可以根据条件的值来决定make的执行 可以比较两个不同变量或者变量和常量值2.注意事项条件判断语句只能用于控制make实际执行的语句;但是不能控制规则命...原创 2019-07-18 10:03:33 · 128 阅读 · 0 评论 -
7.变量的高级主题下
目录1.环境变量(全局变量)2.为什么要在makefile中使用环境变量?3.变量在不同makefile之间的传递方式4.目标变量(局部变量)5.模式变量6.小结1.环境变量(全局变量)makefile中能够直接使用环境变量的值 定义了同名变量,环境变量将被覆盖 其实JAVA_HOME...原创 2019-07-18 09:52:11 · 95 阅读 · 0 评论 -
6.变量的高级专题上
目录1.变量值得替换2.变量模式替换3.规则中的模式替换4.规则中的模式替换示例5.变量值得嵌套引用6.命令行变量7.override关键字8.define关键字9.小结1.变量值得替换使用指定字符(串)替换变量值中的后缀字符(串) 语法格式:$(var:a=b)或${var:a=b} 替换表达式中不能有任何空格...原创 2019-07-18 09:42:12 · 97 阅读 · 0 评论 -
5.预定义变量的使用
目录1.在makefile中存在一些预定义的变量2.自动变量的意义3.自动变量的使用示例4.一些特殊变量的含义5.小结1.在makefile中存在一些预定义的变量自动变量$@, $^, $<特殊变量$(MAKE), $(MAKECMDGOALS), $(MAKEFILE_LIST) $(MAKE_VERSION), $(CURDIR), $(VARI...原创 2019-07-18 09:26:27 · 175 阅读 · 0 评论 -
Makefile常用万能模板(包括静态链接库、动态链接库、可执行文件)
本文把makefile分成了三份:生成可执行文件的makefile,生成静态链接库的makefile,生成动态链接库的makefile。 1、生成可执行文件的makefile##############################################################################source file#源文件,自动找...原创 2019-08-28 16:22:11 · 186 阅读 · 0 评论