TinyOS的个人见解3之make

      以简单的Blink为例,Blink目录下的Makefile文件
COMPONENT=BlinkAppC
include $(MAKERULES)
可以看到MAKERULES这个是上一篇环境变量的export所声明过的,也就是../support/make目录,这个目录下文件基本介绍:
*.target---------target文件,指明编译平台也就是make telosb/cc2538cb(对应为telosb.target和cc2538cb.target)
打开cc2538cb.target文件:
#-*-Makefile-*- vim:syntax=make
PLATFORM = cc2538cb
ifdef CC2520_CHANNEL
PFLAGS += -DCC2520_DEF_CHANNEL=$(CC2520_CHANNEL)
endif
PFLAGS += -I$(TOSROOT)/tos/chips/cc2538/fwlib
$(call TOSMake_include_platform,cc2538cb)
$(call TOSMake_include_make_platform,cc2538cb)
cc2538cb: $(BUILD_DEPS)
@:
我们看到的是声明平台是cc2538cb以及编译规则目录是cc2538cb
*.extra ----------编译的额外说明文件,主要是指比如blip.extra,coap.extra,主要是对你编译时候用到的其他库的一个补充,这些额外库的编译选项已经组件目录路径
下面则是编译的rules。对于telosb对应是msb目录,对于cc2538cb则为cc2538cb目录,里面会有xxx.rules目录,这个也就是make的核心文件;
再此不再详细介绍:
总结编译过程 比如编译命令为make cc2538cb blip id.1
过程为执行cc2538cb.rules的编译过程同时 引入blip的库组件以及 设置编译的rf的短地址为1

知道这些后你可以个性化你的make规则!!!

     补充说明 编译一个例程的Makefile文件的编写,如Blink,Blink目录下的Makefile文件
COMPONENT=BlinkAppC
include $(MAKERULES)
最基本你需要指定COMPONENT= xxxx,
最后指定make目录,你会发现其他的例程中间还有很多,那些都是一些堆代码编译的宏定义而已


       那么现在我说明一下为什么保留2.2.12release的make方式呢,你不用怀疑现在代码不是github同步的,实际上你可以去对比,代码和githun tinyos到现在为止组件尤其是库组件是同步的。
不喜欢github代码上现在的做法是因为,make的不灵活,您可以自己去看他现在的make方式已经丧失了从tinyos一直以来的灵活的make方式,那就是每个平台有自己的rules,现在的这种捆绑让就从2530就开始移植的我感到非常反感。.pltform等文件的指定目录当然是进步,但是将所有的编译弄进自己的makefile,rules是否是一个好的方法我保留意见。
代码的例程我采用nesc-1.4.2版本,最新版本是1.3.5.1,也就是能配合编译github最新的那个nesc编译器,我测试过没什么大用处,毕竟你可以去看nesc编译器1.3.5.1的更新日志,对现在的代码编译来说没什么用处。


       也许以后我会妥协移植遵守他的make写法,但是不是现在,除非某些库组件确实必须用到nesc1.3.5.1的一些新特性,但是至少现在没有.......

你可能感兴趣的:(TinyOS的个人见解3之make)