对于eclipse 这类编译器 build project 的时候makefile 文件写明了编译的全过程。我一直抱着凑合改改能用即可态度,实际上反而花费了更多的时间 。今天开始一句一句的分析8266的RTOS工程里的makefile 文件,本着笨人笨办法的态度一句一句读。
首先eclipse 在工程RTOS30执行 build project 实际等同于在RTOS30目录层执行 make , 命令行输入make 试试,提示如下:
因为这目录里没makefile,make 寻找“GNUmakefile”,“makefile”,“Makefile”这几个文件,谁先找到就听谁的开始干活。 和以前的2.0的版本不一样3.0的makefile 采用单独工程单独设置了。那么
进入自己的项目wifi里发现了makefile,内容如下:#开始的为注释内容,暂时不管。
只有2句话 :1,给 PROJECT_NAME赋值,以后用到$PROJECT_NAME都替换成 simple_wifi 了。
2. 把 IDF_PATH(上一篇我们在esp32_toolchain.sh这个批处理文件里定义了IDF_PATH 与PATH D:\msys32\home\andluman\esp\RTOS30)/make/project.mk 引用过来。现在去看看里面都是什么内容呢?
巨大一堆。
不管3721先敲下 make 试试
干活了。
那么我们接下来看看他是怎么一条一条运行的。线索肯定在project.mk的一大堆堆里面。
读project.mk文件前我们简单了解一下 A.注释为#开头,B,@echo 表示打印提示信息给你看看(里面很多坑,比如必须以tab键开头). C:.mk 文件的最基本构成是 target ... : prerequisites .
command1
command2
command3
...
进入正文:
####注释一堆,看得懂得应该看看。
具体执行的第一句:
.PHONY: build-components menuconfig defconfig all build clean all_binaries check-submodules size size-components size-files size-symbols list-components 这句 .PHONY 标识 表示:如果他后面那一堆名称不小心与你的文件夹重名 他不犯傻抛弃上面的命令导致编译出错。还有另外个作用暂时不用管。
MAKECMDGOALS ?= all 缺省的make 参数为 执行 target all 你也可以改成 =clean 试试坑自己一把
all: all_binaries 你敲了make 或者make all 那么他就进来找这个all target;这玩意就像门铃没人按他他是不会执行的。你按了以后门开了,all_binaries 出来了,至于他是一个啥我们去找找看。
all_binaries: $(APP_BIN) 又是一扇门,门后面是 $(APP_BIN) ,$的意思是取括号里的值,值有可能是1个数,有可能是一堆数,数组,字符,目录,等等许多可能;我们把他取出来再决定干什么;看看APP_BIN在哪定义的替换进来。
378行:APP_BIN:=$(APP_ELF:.elf=.bin)
又要烂尾吗。慢慢再填坑。