makefile
文章平均质量分 70
makefile
qq_52484093
这个作者很懒,什么都没留下…
展开
-
路径搜索的综合示例
需求分析工程项目中不希望源码文件夹在编译时被改动 (只读文件夹)在编译时自动创建文件夹 (build) 用于存放编译结果编译过程中能够自动搜索需要的文件makefile 易于拓展,能够复用于相同类型的项目支持调试版本的编译选项项目类型分析工具原料$(wildcard $(DIR)/_pattern)获取 $(DIR) 文件夹中满足 _pattern 的文件$(notdir _names)去除 _names 中每一个文件名的路径前缀$(patsubst原创 2022-02-05 19:59:58 · 444 阅读 · 0 评论 -
make中的路径搜索
问题在实际的工程项目中,所有源文件和头文件都放在同一文件夹中吗?常用的源码管理方式项目中的 makefile 必须能够正确的定位源文件和依赖的文件,最终编译产生可执行程序。下面的 makefile 能编译成功吗?不能,当前目录下不存在对应的 .c 源文件。特殊的预定义变量 VPATH (全大写)VPATH 变量的值用于指示 make 如何查找文件不同文件夹可作为 VPATH 的值同时出现文件夹的名字之间需要使用分隔符进行区分make 对 V原创 2022-02-04 21:32:36 · 1692 阅读 · 0 评论 -
make的隐式规则
问题如果同一个目标的命令拆分写到不同地方,会发生什么?下面的程序怎么执行?为什么?makefile 中出现同名目标时依赖:所有的依赖合并在一起,成为目标的最终依赖命令:当多处出现同一目标的命令时,make 发出警告 所有之前定义的命令被之后定义的命令取代注意事项当使用 include 关键字包含其他文件时,需要确定被包含文件中的同名目标只有依赖,没有命令;否则,同名目标的命令将被覆盖!命令的拆分makefile.PHONY : all原创 2022-02-03 19:53:08 · 1310 阅读 · 0 评论 -
自动生成依赖关系
值得思考的问题目标文件 (.o) 是否只依赖于源文件 (.c)?编译器如何编译源文件和头文件?编译行为带来的缺陷预处理器将头文件中的代码直接插入源文件编译器只通过预处理后的源文件产生目标文件因此,规则中以源文件为依赖,命令可能无法执行下面的 makefile 有没有问题?问题的提出makefileTARGET := hello.outCC := gccSRCS := $(wildcard *.c)OBJS := $(SRCS:.c=.o.原创 2022-02-01 21:21:55 · 2754 阅读 · 1 评论 -
变量与函数的综合示例
实战需求自动生成 target 文件夹存放可执行文件自动生成 objs 文件夹存放编译生成的目标文件 (*.o)支持调试版本的编译选项考虑代码的拓展性工具原料$(wildcard _pattern)获取当前目录中满足 _pattern 的文件或目录列表$(addprefix _prefix, _names)给名字列表_names 中的每一个名字添加前缀_prefix关键技巧1. 自动获取当前目录下的源文件列表 (函数调用)SRCS := $(wildc..原创 2022-01-31 21:00:42 · 448 阅读 · 0 评论 -
函数定义及调用
makefile 中支持函数的概念make 解释器提供了一系列的函数供 makefile 调用在 makefile 中支持自定义函数实现,并调用执行通过 define 关键字实现自定义函数自定义函数的语法深入理解自定义函数自定义函数是一个多行变量,无法直接调用自定义函数是一种过程调用,没有任何的返回值自定义函数用于定义命令集合,并应用于规则中自定义函数makefile.PHONY : testdefine func1 @echo "my n原创 2022-01-31 20:30:19 · 569 阅读 · 0 评论 -
条件判断语句
makefile 中支持条件判断语句可以根据条件的值来决定 make 的执行可以比较两个不同变量或者变量和常量值ifxxx (arg1, arg2)# for trueelse# for falseendif注意事项条件判断语句只能用于控制 make 实际执行的语句;但是,不能控制规则中命令的执行过程。条件判断语句的语法说明常用形式ifxxx (arg1,arg2)其他合法形式ifxxx "arg1" "arg2" ifxxx 'arg1'原创 2022-01-30 21:15:31 · 633 阅读 · 0 评论 -
变量的高级主题
变量值的替换使用指定字符 (串) 替换变量值中的后缀字符 (串)语法格式:$(var:a=b) 或 ${var:a=b}替换表达式中不能有任何的空格 make 中支持使用 ${} 对变量进行取值变量的模式替换使用 % 保留变量值中的指定字符,替换其他字符语法格式:$(var:a%b=x%y) 或 ${var:a%b=x%y}替换表达式中不能有任何的空格 make 中支持使用 ${} 对变量进行取值规则中的模式替换意义:通过 target-patt.原创 2022-01-29 20:36:19 · 350 阅读 · 0 评论 -
预定义变量的使用
在 makefile 中存在一些预定义的变量自动变量$@,$^,$<特殊变量$(MAKE),$(MAKECMDGOALS),$(MAKEFILE_LIST),$(MAKE_VERSION),$(CURDIR),$(.VARIABLES)。。。自动变量的意义$@当前规则中触发命令被执行的目标$^当前规则中的所有依赖$<当前规则中的第一个依赖自动变量的使用示例自动变量的使用makefile.1.PHONY : all fir..原创 2022-01-29 19:47:01 · 129 阅读 · 0 评论 -
变量和不同的赋值方式
makefile 中支持程序设计语言中变量的概念makefile 中的变量只代表文本数据 (字符串)makefile 中的变量名规则变量名可以包含字符,数字,下划线 不能包含 ":","#","="," " 变量名大小写敏感变量的定义和使用makefileCC := gccTARGET := hello.out$(TARGET) : func.o main.o $(CC) -o $(TARGET) func.o main.ofunc.o : func.c $原创 2022-01-28 19:21:19 · 172 阅读 · 0 评论 -
伪目标的引入
思考makefile 中的目标究竟是什么?默认情况下make 认为目标对应着一个文件make 比较目标文件和依赖文件的新旧关系make 以文件处理作为第一优先级下面的代码有什么意义?删除该目录下的所有 .o 文件和 hello.out 文件。makefile 中的伪目标通过 .PHONY关键字声明一个伪目标伪目标不对应任何实际的文件不管伪目标的依赖是否更新,命令总是执行伪目标的语法:先声明,后使用本质:伪目标是 make 中特殊目标 .原创 2022-01-28 18:47:57 · 112 阅读 · 0 评论 -
初识makefile的结构
makefile 的意义makefile 用于定义源文件之间的依赖关系makefile 用于说明如何编译各个源文件并生成可执行文件依赖的定义:targets : prerequisites ; command1'\t' command2makefile 中元素的意义targets通常是需要生成的目标文件名 make 所需执行的命令名称prerequisites当前文件所依赖的其他目标或文件command完成目标所需要执行的命令规则中的注意事项原创 2022-01-27 21:54:58 · 1027 阅读 · 0 评论 -
make和makefile
思考什么是 make?什么是 makefile?make 是一个应用程序解析源程序之间的依赖关系根据依赖关系自动维护编译工作执行宿主操作系统中的各种命令makefile 是一个描述文件定义一系列的规则来指定源文件编译的先后顺序拥有特定的语法规则,支持函数定义和函数调用能够只能集成操作系统中的各种命令make 和 makefile 之间的关系makefile 中的描述用于指导 make 程序如何完成工作;make 根据 makefile 中的规则执行原创 2022-01-27 19:12:29 · 121 阅读 · 0 评论
分享