Contiki-sensinode之makefile分析

    写在最前面:本博客不算是原创博客,在查看了crystal736 关于contiki2.6之Makefile

的详细解读系列博客之后,对于此部分内容有一定的理解,结合自己的理解对相关的知

识进行整理归纳。另外本文分析的是Contiki-sensinode分支,因为实验是关于contiki在

cc2530平台下的udp-ipv6实验,这个实验在contiki2.7的源代码中的栈空间的管理存在一

定的问题,实验过程中server节点一直处于复位重启的状态。

    对于contiki的makefile的分析主要包括两个方面的内容:

  • Makefile文件的相互包含关系
  • 目标文件生成的相互依赖关系
    
【Makefile文件的相互包含关系】

在contiki源码中有很多工程,在example目录里面,每一个目录对应一个工程,比如cc2530dk目录中就对应的是cc2530平台的工程,记住有makefile文件的当前目录才是工程目录。在工程目录下的Makefile自然就是我们在工程目录下执行make命令最起始的文件。


DEFINES+=PROJECT_CONF_H=\"project-conf.h\"

HAVE_BANKING=1
UIP_CONF_IPV6=1
UIP_CONF_RPL=1

PROJECT_SOURCEFILES += ping6.c

CONTIKI_PROJECT = client server

all: $(CONTIKI_PROJECT) 

CONTIKI = ../../..

include $(CONTIKI)/Makefile.include


此Makefile文件的内容如上所述。可以看到Makefile中包含了根目录下的Makefile.include的文件.

Makefile.include文件中可能存在的Makefile文件包含有:

  1. include Makefile.target(TARGET变量未定义时包含 && Makefile.target的路劲存在于工程目录下
  2. include Makefile.$(TARGET).defines (变量DEFINES未定义时包含 &&Makefile.$(TARGET).defines存在于工程目录下
  3. include $(CONTIKI)/core/net/rime/Makefile.rime  
  4. include $(CONTIKI)/core/net/mac/Makefile.mac
  5. include $(CONTIKI)/core/net/rpl/Makefile.rpl (定义UIP_CONF_IPV6  且  UIP_CONF_RPL 不为 0 )
  6. -include $(APPINCLUDES)
  7. include $(target_makefile)
  8. -include ${addprefix $(OBJECTDIR)/,$(CONTIKI_SOURCEFILES:.c=.d) \
      $(PROJECT_SOURCEFILES:.c=.d)}
此处重点分析第6、7 、 8  项

   【6】

### Include application makefiles

ifdef APPS
  APPDIRS += ${wildcard ${addprefix $(CONTIKI)/apps/, $(APPS)} \
      ${addprefix $(CONTIKI)/platform/$(TARGET)/apps/, $(APPS)} \
      $(APPS)}
  APPINCLUDES = ${foreach APP, $(APPS), ${wildcard ${foreach DIR, $(APPDIRS), $(DIR)/Makefile.$(APP)}}}
  -include $(APPINCLUDES)
  APP_SOURCES = ${foreach APP, $(APPS), $($(APP)_src)}
  DSC_SOURCES = ${foreach APP, $(APPS), $($(APP)_dsc)}
  CONTIKI_SOURCEFILES += $(APP_SOURCES) $(DSC_SOURCES)
endif

如果定义了APPS,则包含,没有就不包含,在cc2530中我们没有定义这个变量,所以就不包含应用程序目录中的文件。那么在其他的平台如sky中的某一个工程,会定义APPS,此时定义APPDIRS变量。假如APPS 为telnet (apps目录中的某一个目录文件),则用wildcard函数找出与此APPS相关的一些目录列表,wilcard后面的参数代表是的是一种模式,它是在当前目录中搜索符合这种模式的文件,并返回这种模式的文件名列表。注意这里在当前目录中搜索,包括目录的子目录,子目录的子目录等。


【7】

target_makefile := $(wildcard $(CONTIKI)/platform/$(TARGET)/Makefile.$(TARGET)

在当前目录中搜索符合上述模式的文件。即搜索文件$(CONTIKI)/platform/cc2530dk/Makefile.cc2530dk
【8】
ifneq ($(MAKECMDGOALS),clean)
-include ${addprefix $(OBJECTDIR)/,$(CONTIKI_SOURCEFILES:.c=.d) \
       $(PROJECT_SOURCEFILES:.c=.d)}
endif

MAKECMDGOALS为make的环境变量,它会存放你所指定的终极目标的列表。那么上面几句表示如果执行的命令不是make clean 则包含include指定的makefile文件,这些文件是什么呢?obj_cc2530dk/....中以.d为后缀的文件


上面分析结束后,我们makefile的文件包含便分析到了根目录下的makefile.include. 其中第【7】Makefile.cc2530dk项还存在子包含,其他项不存在。


Makefile.cc2530dk中定义了一系列于目标板CC2530相关的一些变量,并在其结尾处:

CONTIKI_CPU=$(CONTIKI)/cpu/cc253x

include $(CONTIKI_CPU)/Makefile.cc253x

包含了$(CONTIKI)/cpu/cc253x路径下的Makefile.cc253x文件


Makefile.cc253x文件中仅存在一个makefile的包含关系

include $(CONTIKI_CPU)/usb/Makefile.usb



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值