esp8266~makefile学习
发布日期:2021-06-29 13:13:32
浏览次数:2
分类:技术文章
本文共 2101 字,大约阅读时间需要 7 分钟。
Makefile 是和 make 命令一起配合使用的. makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。很多大型项目的编译都是通过Makefile来组织的,如果没有Makefile, 那很多项目中各种库和代码之间的依赖关系不知会多复杂。
Makefile的组织流程的能力如此之强,不仅可以用来编译项目, 还可以用来组织我们平时的一些日常操作。1、makefile使用规则
规则的三要素:目标、指令、依赖
target: components
TAB rule
第一个目标是终极目标,之后的目标为子目标。
更新目标会自动检查依赖是不是最新的,生产最新的目标。 实例中当前目录中有main.c、add.c、div.c、mul.c、sub.c、add.h、div.h、mul.h、sub.h共9个源文件,main.c中通过include调用add、div、mul、sub中提供的方法,下面就一步一步的深入学习makefile中基本的书写。#makefile v1main:main.c add.c div.c mul.c sub.c gcc main.c add.c div.c mul.c sub.c -o main
当源文件过多时,一条指令会很长,每次添加新的源文件则需要更改一次makefile,所以换下面一种方式书写makefile:
#makefile v2app:main.o add.o div.o mul.o sub.o gcc main.o add.o div.o mul.o sub.o -o appmain.o: main.c gcc -c main.cmain.o: add.c gcc -c add.cmain.o: sub.c gcc -c sub.cmain.o: mul.c gcc -c mul.cmain.o: div.c gcc -c div.c
2、makefile中的变量
1、自定义变量:直接使用=号定义赋值,使用$取值
2、自动变量 makefile中系统自己维护的变量,通常是大写,可直接使用=号修改它的值,如下:CC = cc
CPPFLAGS = i
3、变量的赋值:
= 是最基本的赋值
:= 是覆盖之前的值 ?= 是如果没有被赋值过就赋予等号后面的值 += 是添加等号后面的值
了解完这些之后,可将makefile中不变的字符串用变量替换,当然还需要记住下面两点:
1、变量的三种用法只能在命令中使用: 2、在规则的目标定义和依赖条件中可使用%做通配符#makefile v3#obj targetobj=main.o add.o div.o mul.o sub.otarget=app#self maintaining var: CC CPPFLAGSCC = gccCPPFLAGS = -I$(target):$(obj) $(CC) $(obj) -o $(target)%.o:%.c $(CC) -c $< -o $@clean: rm $(obj) $(target)
3、函数的使用
搜索函数 —— wildcard ./ .c
匹配替换函数 —— patsubst ./%.c ./%.o src 伪目标 —— .PHONY
Makefile中所有的函数都是有返回的,上面是几个常见的函数,这样我们的makefile也写的比较规范了。
#makefile v4#obj target#obj=main.o add.o div.o mul.o sub.otarget=appsrc=$(wildcard ./*.c)obj=$(patsubst ./%.c, ./%.o, $(src))#self maintaining var: CC CPPFLAGSCC = gccCPPFLAGS = -I$(target):$(obj) $(CC) $(obj) -o $(target)%.o:%.c $(CC) -c $< -o $@#phony target.PHONY:cleanclean: -echo "hello" rm $(obj) $(target) -f#auto var#$<: first depend at the rule#$@: target at the rule#$^: all depends at the rule#just used at the rule command
4、esp8266中makefile的学习
esp8266工程代码中使用了一套python和xtensa编译工具配合makefile完成项目的管理,还是挺复杂的,找了网上的资料大概了解了一番,表示很复杂,大概熟悉了makefile的层级结构、如何添加新的源文件目录和更改编译下载的参数对应的修改makefile,先收藏着后续如果用到可做参考。
收藏:
转载地址:https://chalk.blog.csdn.net/article/details/81949577 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月26日 14时09分03秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
python基础:list,map,open()文件读写
2019-04-29
Go面向对象-接口
2019-04-29
Go-多路选择和超时控制
2019-04-29
Go-channel的关闭和广播
2019-04-29
Go-任务的取消
2019-04-29
AIX 作为Web Server 使用时,tcp相关的几个参数调整
2019-04-29
自我学习37:请描述一下网页从开始请求到最后展示的完整过程
2019-04-29
自我学习38:如何区分前后端BUG
2019-04-29
自我学习39:接口自动化测试用例&功能测试用例区别
2019-04-29
mirror去兔子补丁下载 附安装教程
2019-04-29
mirror去兔子补丁 v3.0附安装教程
2019-04-29
mirror去兔子补丁为什么还有兔子_mirror去兔子补丁使用教程
2019-04-29
3dmax2012安装教程
2019-04-29
OC渲染器(Octane Render)整合版安装包 附安装教程
2019-04-29
操作系统期末大题复习
2019-04-29
hive:分区表,hbase外表
2019-04-29
想要成为运维,想要成为后期的架构师?这些知识是必备的!
2019-04-29
linux 是如何 快速一键安装禅道的呐?
2019-04-29
运维面试基础试题(四)
2019-04-29
一键安装Openstack单节点 必能成功
2019-04-29