教你玩转makefile
文章平均质量分 89
一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,也可以执行操作系统的命令。
Exp.Joker
这个作者很懒,什么都没留下…
展开
-
教你玩转makeflie(八)打造专业的编译环境
打造专业的编译环境(上)20.1 大型项目的目录结构(无第三方库)20.2 项目架构设计分析20.3 需要打造的编译环境20.4 解决方案设计第1阶段︰将每个模块中的代码编译成静态库文件第2阶段︰将每个模块的静态库文件链接成最终可执行程序20.5 第一阶段任务20.6 关键的实现要点20.7 模块makefile 中的构成20.8 编程实验:模块的编译makefile20.9 To be continued ...思考︰如何编写项目makefile使其能够触发模块makefile 的调用,并最.......原创 2022-06-20 10:40:10 · 468 阅读 · 0 评论 -
教你玩转makeflie(九)模块独立编译的支持、第三方库的使用支持
模块独立编译的支持23.1 问题一般而言,不同工程师负责不同模块的开发;编译环境中如何支持模块的独立编译?23.2 问题背景23.3 解决方案23.4 关键技术点23.5 编程实验:模块的独立编译make module23.6 思路23.7 编程实验:makefile中的代码复用自定义函数23.8 小结第二十四部分 :第三方库的使用支持24.1 问题当需要使用第三方库文件时,编译环境中的makefile 改如何修改?24.2 经验假设24.3 第三方库在项目中的位置24.4 第三方库的编译阶......原创 2022-06-20 10:40:17 · 571 阅读 · 0 评论 -
教你玩转makeflie(七)make 中的路径搜索、路径搜索的综合示例
make 中的路径搜索(上)17.1 问题在实际的工程项目中,所有的源文件和头文件都放在同一个文件夹中吗?17.2 常用的源码管理方式项目中的makefile必须能够正确的定位源文件和依赖的文件,最终编译产生可执行程序。17.3 下面的makefile能够成功编译吗? 17.4 特殊的预定义变量VPATH(全大写)17.5 make 对于VPATH值的处理方式17.6 注意事项17.7 编程实验:VPATH的使用makefile.1OBJS := func.o main.oINC := in......原创 2022-06-20 10:39:55 · 3579 阅读 · 0 评论 -
教你玩转makeflie(六)make的隐式规则
makefile 中出现同名目标时依赖︰所有的依赖将合并在一起,成为目标的最终依赖命令∶当多处出现同一目标的命令时,make发出警告所有之前定义的命令被最后定义的命令取代当使用include关键字包含其它文件时,需要确保被包含文件中的同名目标只有依赖,没有命令;否则,同名目标的命令将被覆盖!若去掉一部分会编译成功吗?会的当依赖的目标不存在时,make 会极力组合各种隐式规则对目标进行创建,进而产生意料之外的编...原创 2022-06-18 11:49:11 · 527 阅读 · 0 评论 -
教你玩转makeflie(五)自动生成依赖关系
当func.h发生改变,理应重新编译,但makefile只检查两个源文件,发现无改动是最新的,所以不会重新编译,导致错误。OBJS := func.o main.ohello.out : $(OBJS)@gcc -o $@ $^@echo "Target File ==> $@"$(OBJS) : %.o : %.c func.h@gcc -o $@ -c $...原创 2022-06-18 11:44:43 · 1616 阅读 · 0 评论 -
教你玩转makeflie(四)条件判断语句、函数定义及调用、变量与函数的综合示例
ifxxx (arg1,arg2)# for tureelse# for falseendif条件判断语句只能用于控制make 实际执行的语句;但是,不能控制规则中命令的执行过程。不相同,右边的var2在编译阶段就无法确定,是否被赋值当前工作目录下逐个对工作目录中的文件进行,与6.4相对应.反编译:objdump -S hello-makefile.out 上为生成调试信息,下为不生成调试信息...原创 2022-06-18 11:37:31 · 585 阅读 · 0 评论 -
教你玩转makeflie(三)预定义变量的使用、变量的高级主题
预定义变量的使用5.1 在makefile中存在一些预定义的变量5.2 自动变量的意义5.3 自动变量的使用示例注意:1、“$”对于makefile有特殊含义2、“$@”对于 Bash Shell有特殊含义5.4 编程实验:自动变量的使用.PHONY : all first second thirdall : first second third@echo "\$$@ => $@"@echo "$$^ => $^"@echo "$$< => $...原创 2022-06-18 11:32:18 · 1161 阅读 · 0 评论 -
教你玩转makeflie(二)伪目标的引入、变量和不同的赋值方式
伪目标的引入makefile 中的目标究竟是什么?3.1 默认情况下3.2 下面的代码有什么意义?3.3 编程实验:有趣的目标 makefile.1hello.out all : func.o main.ogcc -o hello.out func.o main.ofunc.o : func.cgcc -o func.o -c func.cmain.o : main.cgcc -o main.o -c main.cclean :rm *.o hello.out解释:当makefile同目录下,有...原创 2022-06-18 11:26:32 · 413 阅读 · 0 评论 -
教你玩转makeflie(一)make和makefile、初识 makefile 的结构
eg: 编译10000个源文件,第9999个,出错了,改好后重新编译,make自动跳过前9998个;注意:目标后的命令需要用Tab键('\t')隔开!否则报错。make -f mf.txt hello功能说明:以hello关键字作为目标查找mf.txt文件(-f 后),并执行hello处的命令。make hello功能说明:以hello关键字作为目标查找makefile或Makefile文件,并执行hello处的命令。make功能说明:查找makefile或Makefile文件中最顶层目标。并执行最顶层目标原创 2022-06-18 00:22:32 · 657 阅读 · 0 评论