Contiki Makefile.include 笔记
约定: makefile 包括Makefile、Makefile.xxx,并不单指Makefile
不对makefile的语法进行分析,仅仅关注几个需要点。
首先要说明,Makefile.include是被用户的工程目录下的"Makefile" include之,这个是必须要做的。
Makefile.include 从上到下,顺序检索。
关注点一:
最开始,编译系统会检查用户是否定义了 contiki 源码根目录、检查用户定义的硬件平台、是否使用ipv6、当前编译系统。如下图:
A 如果用户不在自己的Makefile中定义CONTIKI 这个变量,编译会终止并报错。一般的,应该在工程目录下的Makefile里面定义成这样:
“ CONTIKI = ../.. “
B 检查用户定义的硬件平台:如果命令选择了”make” 而非 “make TARGET=bse” ,会添加工程目录下Makefile.target这个文件,在这个文件里去找TARGET的定义。如果依然没有定义,系统会默认用户选择了”native” 硬件平台。
C 添加 “Makefile.$(TARGET).defines” 文件,这个文件也是存在于用户工程目录下
D 检查是否启用ipv6
E 检查编译环境系统:是windows 还是linux
关注点二:
导入contiki的核心代码、创建obj目标目录。Obj_$(target)目录里当然要存放各种生成的.o文件。如下图:
如上图可以看出 contiki/ 下的 core/ 是被无条件包含进来了----无论你是什么平台或者什么应用。当然,也不是绝对的。如果要裁减一些功能,可以修改变量 “CONTIKIDIRS”的值即可<或许有这样的需要>。接着要在工程目录下创建一个放 ”*.o”文件的地方,以前缀”obj_”命名。
关注点三:
检查用户是否要导入一些上层 application,如果有,则会导入contiki/apps/ 以及Contiki/platform/$(TARGET)/apps/ 下相对应的makefile文件。检查的机制是以用户的Makefile中是否定义了”APPS”变量为标准,如下图:
”APPS”变量在Makefile中的定义形如下图< 以email应用为例>:
关注点四:
导入相应的硬件平台下的makefile,比如是CC2530平台的话,那就导入Makefile.cc2530dk这个makefile,如下图:
具体就有 “target_makefile” 这个变量来搞定了。
target_makefile := $(wildcard $(CONTIKI)/platform/$(TARGET)/Makefile.$(TARGET) ${foreach TDIR, $(TARGETDIRS), $(TDIR)/$(TARGET)/Makefile.$(TARGET)})
OK,上面即是Makefile.include干的主要的事情。其他的就是一些变量赋值什么的。