認識了源碼結構,如今終於能夠學習怎麼編譯了。linux
上一次的帖子說道,源碼的目錄結構,如今咱們看看makefile的目錄:web
[leonard@Archlinux contiki]$ tree -L 5 | grep Makefile │ │ └── Makefile.about │ │ ├── Makefile.antelope │ │ └── Makefile.at-master . . . │ │ ├── Makefile.webbrowser │ │ ├── Makefile.webserver │ ├── Makefile.webserver-nano │ │ │ ├── Makefile.tsch │ │ │ ├── Makefile │ │ │ ├── Makefile.c128.defines │ │ │ ├── Makefile.c64.defines │ │ │ └── Makefile.target │ │ │ ├── Makefile │ │ │ ├── Makefile.apple2enh.defines │ │ │ ├── Makefile.atarixl.defines │ │ │ ├── Makefile.c128.defines │ │ │ ├── Makefile.c64.defines │ │ │ └── Makefile.target │ │ ├── Makefile.6502 │ │ ├── Makefile.customrules-6502 │ │ │ ├── Makefile.aducrf101 │ │ │ ├── Makefile.aducrf101.gnu │ │ │ ├── Makefile.aducrf101.iar │ │ │ ├── Makefile.at91sam7s │ │ │ │ ├── Makefile.sdcard │ │ │ ├── Makefile.usb │ │ │ ├── Makefile.stm32f103 │ │ ├── Makefile.stm32l152 │ │ ├── Makefile.stm32l152.gnu │ │ ├── Makefile.stm32l152.iar │ │ ├── Makefile.avr │ │ │ │ └── Makefile.ieee-manager │ │ │ │ ├── Makefile.mac │ │ │ ├── Makefile.radio │ │ │ │ ├── Makefile.rf230 │ │ │ ├── Makefile.rf230bb │ │ ├── Makefile.cc2538 │ │ ├── Makefile.cc253x │ │ ├── Makefile.customrules-cc253x │ │ ├── Makefile.usb │ │ ├── Makefile.cc13xx │ │ ├── Makefile.cc26xx │ │ ├── Makefile.cc26xx-cc13xx │ │ │ ├── Makefile.lib │ │ ├── Makefile.include │ │ ├── Makefile.mc1322x │ │ │ ├── Makefile.src │ │ │ ├── Makefile │ │ │ │ └── Makefile │ │ ├── Makefile.msp430 │ │ ├── Makefile.native │ │ ├── Makefile.nrf52832 │ │ ├── Makefile.pic32 │ │ ├── Makefile.rl78 │ │ │ ├── Makefile │ │ ├── Makefile.stm32w108 │ │ │ ├── Makefile │ ├── Makefile.x86_common │ ├ . . . . . │ ├── Makefile │ ├── Makefile.compile-test │ ├── Makefile.simulation-test │ │ └── Makefile │ │ └── Makefile │ │ ├── Makefile │ │ ├── Makefile │ ├── Makefile │ │ ├── Makefile │ │ ├── Makefile │ │ ├── Makefile.powertrace │ │ │ └── Makefile │ │ │ ├── Makefile │ │ │ └── Makefile.platform │ │ ├── Makefile │ │ ├── Makefile.raven │ │ ├── Makefile.sky │ │ ├── Makefile │ │ │ ├── Makefile.am │ │ ├── Makefile │ │ ├── Makefile │ │ │ ├── Makefile │ │ ├── Makefile │ │ ├── Makefile │ │ │ ├── Makefile ├── Makefile ├── Makefile.target
找找規律看,經過打印信息,咱們看一看到Makefile文件是否是頗有特色的,我總結一下,app
Makefile Makefile.include Makefile.{APP} Makgefie.{TARGET} Makefile.target Makefile.TARGET.defines
Makefile確定是入口了,那麼其餘的是幹什麼用的呢,那咱們一塊兒繼續往下探究。從簡單到複雜,從example的helloword開始找頭緒。ide
CONTIKI_PROJECT = hello-world all: $(CONTIKI_PROJECT) CONTIKI = ../.. include $(CONTIKI)/Makefile.include
這麼簡單,。。。。原來主體的Makefile 是Makefile.include,那咱們來本身建立一個helloword試試,回到contiki的主目錄,建立一個ts文件夾,Makefile,仿照helloword的源碼,寫一個hellocontiki.c,以下學習
#include "contiki.h" #include <stdio.h> /* For printf() */ /*---------------------------------------------------------------------------*/ PROCESS(hello_world_process, "Hello Contiki"); AUTOSTART_PROCESSES(&hello_world_process); /*---------------------------------------------------------------------------*/ PROCESS_THREAD(hello_world_process, ev, data) { PROCESS_BEGIN(); printf("Hello, Contiki\n"); PROCESS_END(); } /*---------------------------------------------------------------------------*/
Makefilecode
CONTIKI_PROJECT = hellocontiki all: $(CONTIKI_PROJECT) include ../Makefile.include
OK。。咱們Make一下,orm
[leonard@Archlinux ts]$ make ../Makefile.include:4: *** CONTIKI not defined! You must specify where Contiki resides。 中止。
出錯了... 看看提示,原來那個CONTIKI = ../.. 不單單是賦值的語句這個應該是全局的path,咱們加進去看看server
CONTIKI_PROJECT = hellocontiki all: $(CONTIKI_PROJECT) CONTIKI = .. include $(CONTIKI)/Makefile.include
繼續Make下ci
[leonard@Archlinux ts]$ make TARGET not defined, using target 'native' mkdir obj_native ..... CC ../core/net/mac/nullrdc.c CC ../core/ctk/ctk-textentry-cmdline.c CC ../core/ctk/ctk-filedialog.c CC ../core/ctk/ctk-textentry-checkbox.c CC ../core/ctk/ctk-textentry-multiline.c CC ../core/ctk/ctk.c CC ../core/net/llsec/nullsec.c CC ../core/net/llsec/anti-replay.c CC ../core/net/llsec/ccm-star-packetbuf.c cp ../tools/empty-symbols.c symbols.c cp ../tools/empty-symbols.h symbols.h CC symbols.c AR contiki-native.a CC hellocontiki.c LD hellocontiki.native rm hellocontiki.co [leonard@Archlinux ts]$
看來咱們猜的沒錯。。。。。。。。。編譯成功了。最後LD文件是 hellocontiki.native,運行下試試。get
[leonard@Archlinux ts]$ ./hellocontiki.native Contiki-3.x-2904-g6157dce started with IPV6, RPL Rime started with address 1.2.3.4.5.6.7.8 MAC nullmac RDC nullrdc NETWORK sicslowpan Tentative link-local IPv6 address fe80:0000:0000:0000:0302:0304:0506:0708 Hello, Contiki
哈哈哈,竟然能夠運行。咱們對比一下編譯先後的目錄。
contiki-native.a hellocontiki.c Makefile symbols.c contiki-native.map hellocontiki.native obj_native symbols.h
增長了項目目錄和執行的文件還有symbols.c.有個案例結束了,咱們就能夠看Makefile.include源碼了。。
同時,到這兒咱們也能夠開始建立本身最簡單的helloword了
由於時間緣由,其餘的makefile下次再說。。