contiki工作目录、makefile变量定义、C文件查找路径--hello-world和wismote为例

来源:互联网 发布:指纹套淘宝价格表 编辑:程序博客网 时间:2024/06/05 17:05

1、工作目录--\examples\hello-world,其下有makefile文件。

---CONTIKI_PROJECT = hello-world
---all: $(CONTIKI_PROJECT)
---UIP_CONF_IPV6=1
---CONTIKI = ../..
---include $(CONTIKI)/Makefile.include //此时make就会停止读取当前的Makefile,转而去读Makefile.include,但是工作目录没有变化

2、Makefile.include是主要文件,其include了多个其它目录的makefile文件,

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

----RIME_BASE      = rimeaddr.c timesynch.c rimestats.c

----CONTIKI_SOURCEFILES += $(RIME_BASE)
--include $(CONTIKI)/core/net/mac/Makefile.mac

----CONTIKI_SOURCEFILES += cxmac.c xmac.c nullmac.c lpp.c frame802154.c sicslowmac.c nullrdc.c nullrdc-noframer.c mac.c
----CONTIKI_SOURCEFILES += framer-nullmac.c framer-802154.c csma.c contikimac.c phase.c

--include $(CONTIKI)/core/net/Makefile.uip
--include $(CONTIKI)/core/net/rpl/Makefile.rpl

CONTIKI_SOURCEFILES只是定义了文件名称,没有指明每个文件在哪个目录

CONTIKIDIRS += ${addprefix $(CONTIKI)/core/,dev lib net net/mac net/rime \
                 net/rpl sys cfs ctk lib/ctk loader . }//指明了CONTIKI_SOURCEFILES包含的contiki系统文件分布在的所有y可能目录

除此,进一步

--包含APPS---include $(APPINCLUDES),比如ftp,最终包含Makefile.ftp,其指明了哪些源文件需要添加到CONTIKI_SOURCEFILES

--包含target_makefile--include $(target_makefile),比如Makefile.wismote,其进一步包含include $(CONTIKI)/cpu/msp430/Makefile.msp430

----CONTIKI_TARGET_SOURCEFILES += $(ARCH) $(UIPDRIVERS)

----CONTIKI_TARGET_SOURCEFILES += $(MSP430)   $(SYSAPPS) $(ELFLOADER)   $(UIPDRIVERS)
----CONTIKI_SOURCEFILES        += $(CONTIKI_TARGET_SOURCEFILES)//最终都汇总到CONTIKI_SOURCEFILES

----contiki-$(TARGET).a: ${addprefix $(OBJECTDIR)/,symbols.o}

----CONTIKI_TARGET_MAIN = contiki-wismote-main.c

----CONTIKI_CPU=$(CONTIKI)/cpu/msp430

----CONTIKI_CPU_FAM_DIR = f5xxx

----PROJECT_OBJECTFILES += ${addprefix $(OBJECTDIR)/,$(CONTIKI_TARGET_MAIN:.c=.o)}

--包含PLATFORMAPPS

----include $(PLATFORMAPPINCLUDES)
----PLATFORMAPP_SOURCES = ${foreach APP, $(PLATFORMAPPS), $($(APP)_src)}
----CONTIKI_SOUREFILES += $(PLATFORMAPP_SOURCES)//虽然最终都汇总到CONTIKI_SOURCEFILES
----APPDS += $(PLATCFORMAPPDS)//但是APP相关目录最终都汇总到APPDS

3、CFLAGS的-D和-I选项,直接影响C程序的编译和查找路径

CFLAGS += -DCONTIKI=1 -DCONTIKI_TARGET_$(TARGET_UPPERCASE)=1

CFLAGS += -DWITH_UIP6=1

CFLAGS += -mmemory-model=$(TARGET_MEMORY_MODEL)

CFLAGS += -ffunction-sections -fdata-sections -mcode-region=far

CFLAGS  += -Os -fno-strict-aliasing
LDFLAGS += -mmcu=$(CC_MCU) -Wl,-Map=contiki-$(TARGET).map

LDFLAGS += -mmemory-model=$(TARGET_MEMORY_MODEL) -Wl,-gc-sections

LDFLAGS += -Wl,--gc-sections,--undefined=_reset_vector__,--undefined=InterruptVectors,--undefined=_copy_data_init__,--undefined=_clear_bss_init__,--undefined=_end_of_init__

CFLAGS += ${addprefix -D,${subst $(COMMA), ,$(DEFINES)}}//预定义的变量

### Setup directory search path for source and header files


CONTIKI_TARGET_DIRS_CONCAT = ${addprefix ${dir $(target_makefile)}, \
                               $(CONTIKI_TARGET_DIRS)}
CONTIKI_CPU_DIRS_CONCAT    = ${addprefix $(CONTIKI_CPU)/, \
                               $(CONTIKI_CPU_DIRS)}


SOURCEDIRS = . $(PROJECTDIRS) $(CONTIKI_TARGET_DIRS_CONCAT) \
             $(CONTIKI_CPU_DIRS_CONCAT) $(CONTIKIDIRS) $(APPDS) ${dir $(target_makefile)}


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

CFLAGS += ${addprefix -I,$(SOURCEDIRS)}//查找路径



总结:

(1)工作目录始终不变。

(2)CONTIKI_SOUREFILES包含了所有编译的*.C和*.S文件;

(3)SOURCEDIRS定义包含了所有可能的查找路径

(4)-D了若干影响编译的变量。



参考资料:

【1】http://blog.chinaunix.net/uid-12617001-id-3814644.html

1 0
原创粉丝点击