esp8266~makefile学习

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 v1
main: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 v2
app:main.o add.o div.o mul.o sub.o
    gcc main.o add.o div.o mul.o sub.o -o app

main.o: main.c
    gcc -c main.c
main.o: add.c
    gcc -c add.c
main.o: sub.c
    gcc -c sub.c
main.o: mul.c
    gcc -c mul.c
main.o: div.c
    gcc -c div.c

2、makefile中的变量

1、自定义变量:直接使用=号定义赋值,使用$取值
2、自动变量
makefile中系统自己维护的变量,通常是大写,可直接使用=号修改它的值,如下:

CC = cc
CPPFLAGS = i

3、变量的赋值:

= 是最基本的赋值
:= 是覆盖之前的值
?= 是如果没有被赋值过就赋予等号后面的值
+= 是添加等号后面的值

了解完这些之后,可将makefile中不变的字符串用变量替换,当然还需要记住下面两点:
1、变量的三种用法只能在命令中使用:
变量
2、在规则的目标定义和依赖条件中可使用%做通配符

#makefile v3
#obj target
obj=main.o add.o div.o mul.o sub.o
target=app
#self maintaining var: CC CPPFLAGS
CC = gcc
CPPFLAGS = -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.o
target=app
src=$(wildcard ./*.c)
obj=$(patsubst ./%.c, ./%.o, $(src))
#self maintaining var: CC CPPFLAGS
CC = gcc
CPPFLAGS = -I
$(target):$(obj)
    $(CC) $(obj) -o $(target)

%.o:%.c
    $(CC) -c $< -o $@
#phony target
.PHONY:clean
clean:
    -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,先收藏着后续如果用到可做参考。

收藏:
ESP8266 SDK学习笔记(四):Makefile分析
ESP8266学习笔记之makefile
ESP8266_NONOS_SDK开发包生成的镜像文件构建步骤分析
Makefile学习之ESP8266官方工程的Makefile

猜你喜欢

转载自blog.csdn.net/Bluechalk/article/details/81949577