1. 程式人生 > >Contiki2.6 Makefile.include拆解【圖文】

Contiki2.6 Makefile.include拆解【圖文】

此圖文是以contiki2.6原始碼makefile.include為基礎,以變數,關鍵字,用法,宣告來拆解,詳細的功能說明以及難點註解會在下文說明,在此只做拆解。

先說明一下圖文中用到的幾種宣告和定義:

一、ifdef,用法示例

ifdef UIP_CONF_IPV6
  CFLAGS += -DUIP_CONF_IPV6=1
  UIP   = uip6.c tcpip.c psock.c uip-udp-packet.c uip-split.c \
          resolv.c tcpdump.c uiplib.c simple-udp.c
  NET   += $(UIP) uip-icmp6.c uip-nd6.c uip-packetqueue.c \
          sicslowpan.c neighbor-attr.c neighbor-info.c uip-ds6.c
else # UIP_CONF_IPV6
  UIP

   = uip.c uiplib.c resolv.c tcpip.c psock.c hc.c uip-split.c uip-fw.c \
          uip-fw-drv.c uip_arp.c tcpdump.c uip-neighbor.c uip-udp-packet.c \
          uip-over-mesh.c dhcpc.c simple-udp.c
  NET   += $(UIP) uaodv.c uaodv-rt.c
endif # UIP_CONF_IPV6

二、ifndef,用法示例

ifndef CONTIKI_NO_NET
  CONTIKIFILES

 = $(SYSTEM) $(LIBS) $(NET) $(THREADS) $(DHCP) $(DEV)
else
  CONTIKIFILES = $(SYSTEM) $(LIBS) $(THREADS) $(DEV) sicslowpan.c fakeuip.c
endif

三、ifeq,用法示例

ifeq ($(TARGET),)
  ${info TARGET not defined, using target 'native'}
  TARGET=native
else
  ${info using saved target '$(TARGET)'}
endif

四、ifneq,用法示例

ifneq ($(MAKECMDGOALS),clean)
-include ${addprefix $(OBJECTDIR)/,$(CONTIKI_SOURCEFILES:.c=.d) \
                   $(PROJECT_SOURCEFILES:.c=.d)}
endif

五、make命令。e.g. make clean

clean:
rm -f *~ *core core *.srec \
*.lst *.map \
       *.cprg *.bin *.data contiki*.a *.firmware core-labels.S *.ihex *.ini \
       *.ce *.co $(CLEAN)
-rm -rf $(OBJECTDIR)

六、變數.

    makefile的變數也就是一個字串,可以理解成C語言裡的巨集定義。

    e.g.

SYSTEM  = process.c procinit.c autostart.c elfloader.c profile.c \
          timetable.c timetable-aggregate.c compower.c serial-line.c

    定義了SYSTEM變數,使用時以"$(SYSTEM)"的方式使用。

七、 引用。makefile使用 include關鍵字引用其他檔案,類似C語言的#include.

    用法:include <filename>

include $(CONTIKI)/core/net/rime/Makefile.rime
include $(CONTIKI)/core/net/mac/Makefile.mac

    關鍵字,vpath(小寫)

    用法 1、vpath <pattern> <directories>

    為符合模式<pattern>的檔案指定搜尋目錄<directories>

    用法 2、vpath<pattern>

    清除符合模式<pattern>的檔案的搜尋目錄

    用法 3、vpath

    清除所有已被設定好了的檔案搜尋目錄。

vpath %.c $(SOURCEDIRS)
vpath %.S $(SOURCEDIRS)

整體makefile.include檔案拆解如下圖:

-----------------------------------------------------------------------------------【圖一】------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------【圖二】---------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------【圖三】---------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------【圖四】-----------------------------------------------------------------------------------------------

---------------------------------------------------------------------------========我是分割線========-------------------------------------------------------------------------

Makefile.include 的原始碼結構和功能詳解後續接上。。。