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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:C语言~宏操作大全(宏定义、内置宏、__FILE__、__LINE__、##用法)
下一篇:esp8266/32~资源帖[持续更新]

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月26日 14时09分03秒