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-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
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 的原始碼結構和功能詳解後續接上。。。