zoukankan      html  css  js  c++  java
  • The Contiki build system

    The Contiki build system

    http://contiki.sourceforge.net/docs/2.6/a01796.html

    先看官方文档的说明,对contiki的构建系统有个总体的概览。

    The Contiki build system
    ========================
    
    The Contiki build system is designed to make it easy to compile Contiki
    applications for different hardware platforms or into a simulation platform by
    simply supplying different parameters to the make command, without having to
    edit makefiles or modify the application code.
    
    The file example project in examples/hello-world/ shows how the Contiki build
    system works. The hello-world.c application can be built into a complete
    Contiki system by running make in the examples/hello-world/ directory. Running
    make without parameters will build a Contiki system using the native target.
    The native target is a special Contiki platform that builds an entire Contiki
    system as a program that runs on the development system. After compiling the
    application for the native target it is possible to run the Contiki system with
    the application by running the file hello-world.native. To compile the
    application and a Contiki system for the ESB platform the command make
    TARGET=esb is used. This produces a hello-world.esb file that can be loaded
    into an ESB board.
    
    To compile the hello-world application into a stand-alone executable that can
    be loaded into a running Contiki system, the command make hello-world.ce is
    used. To build an executable file for the ESB platform, make TARGET=esb
    hello-world.ce is run.
    
    To avoid having to type TARGET= every time make is run, it is possible to run
    make TARGET=esb savetarget to save the selected target as the default target
    platform for subsequent invocations of make. A file called Makefile.target
    containing the currently saved target is saved in the project's directory.
    
    Beside TARGET= there's DEFINES= which allows to set arbitrary variables for the
    C preprocessor in form of a comma-separated list. Again it is possible to avoid
    having to re-type i.e. DEFINES=MYTRACE,MYVALUE=4711 by running make TARGET=esb
    DEFINES=MYTRACE,MYVALUE=4711 savedefines. A file called Makefile.esb.defines is
    saved in the project's directory containing the currently saved defines for the
    ESB platform.
    
    Makefiles used in the Contiki build system The Contiki build system is composed
    of a number of Makefiles. These are:
    
    * Makefile: the project's makefile, located in the project directory.
    
    * Makefile.include: the system-wide Contiki makefile, located in the root of
      the Contiki source tree.
    
    * Makefile.$(TARGET) (where $(TARGET) is the name of the platform that is
      currently being built): rules for the specific platform, located in the
      platform's subdirectory in the platform/ directory.
    
    * Makefile.$(CPU) (where $(CPU) is the name of the CPU or microcontroller
      architecture used on the platform for which Contiki is built): rules for the
      CPU architecture, located in the CPU architecture's subdirectory in the cpu/
      directory.
    
    * Makefile.$(APP) (where $(APP) is the name of an application in the apps/
      directory): rules for applications in the apps/ directories. Each application
      has its own makefile.
    
    The Makefile in the project's directory is intentionally simple. It specifies
    where the Contiki source code resides in the system and includes the
    system-wide Makefile, Makefile.include. The project's makefile can also define
    in the APPS variable a list of applications from the apps/ directory that
    should be included in the Contiki system. The Makefile used in the hello-world
    example project looks like this:
    
        CONTIKI_PROJECT = hello-world
        all: $(CONTIKI_PROJECT)
    
        CONTIKI = ../..
        include $(CONTIKI)/Makefile.include
    
    First, the location of the Contiki source code tree is given by defining the
    CONTIKI variable. Next, the name of the application is defined. Finally, the
    system-wide Makefile.include is included.
    
    The Makefile.include contains definitions of the C files of the core Contiki
    system. Makefile.include always reside in the root of the Contiki source tree.
    When make is run, Makefile.include includes the Makefile.$(TARGET) as well as
    all makefiles for the applications in the APPS list (which is specified by the
    project's Makefile).
    
    Makefile.$(TARGET), which is located in the platform/$(TARGET)/ directory,
    contains the list of C files that the platform adds to the Contiki system. This
    list is defined by the CONTIKI_TARGET_SOURCEFILES variable. The
    Makefile.$(TARGET) also includes the Makefile.$(CPU) from the cpu/$(CPU)/
    directory.
    
    The Makefile.$(CPU) typically contains definitions for the C compiler used for
    the particular CPU. If multiple C compilers are used, the Makefile.$(CPU) can
    either contain a conditional expression that allows different C compilers to be
    defined, or it can be completely overridden by the platform specific makefile
    Makefile.$(TARGET).
    The Contiki build system

     总结如下: (注:以hello-world为例子)

    1. Contiki 的构建系统使编译Contiki应用程序很简单,只需要给make命令提供不同的参数,就可以把Contiki应用程序编译成不同平台不同应用程序的可执行文件,而不用去修改makefiles或者应用程序代码。

    2. make 默认会编译成本机(native target)可执行文件,编译完的文件(如hello-world.native)可运行在我们的开发环境上。

    3. 指定平台,可以在make命令增加TARGET参数,如指定平台esb,将会生成hello-world.esb文件

    make TARGET=esb

    4. 编译成Contiki运行时可加载的文件,则需要执行以下命令

    make TARGET=esb hello-world.ce

    5. 为了避免每次执行make命令都要输入TARGET变量,可运行如下命令

    make TARGET=esb savetarget

    将TARGET= esb 保存在Makefile.target文件中,作为默认的TARGET.

    6. 除了TARGET参数,还有DEFINES参数,可为c预处理设定任意的变量

    make TARGET=esb DEFINES=MYTRACE,MYVALUE=4711 savedefines

     同样可将DEFINES保存在Makefile.esb.defines中,作为默认的DEFINES。其中esb是平台名称。

    7. Makefiles 文件种类

    Makefile: 工程Makefile,可理解为总控Makefile

    Makefile.include: 在Contiki根目录下, the systme-wide Contiki makefile

    Makefile.$(TARGET): 在平台目录下,及platform/$(TARGET),rules for the specific platform

    Makefile.$(CPU): $(CPU)是cpu的名字,在cpu/$(CPU)目录下,rules for the CPU architecture

    Makefile.$(APP): $(APP)是应用名称,在apps/$(APP)目录下,rules for applications

    8. APPS 变量

    APPS变量定义apps/目录下那些应用程序需要被Contiki 操作系统包含。

    Makefile.include会根据APPS包含进所有apps/目录下相关的makefiles。

    9. 工程Makefile

        CONTIKI_PROJECT = hello-world
        all: $(CONTIKI_PROJECT)
    
        CONTIKI = ../..
        include $(CONTIKI)/Makefile.include

    工程Makefile一般都比较简单,定义Contiki 源代码的根目录位置,用变量CONTIKI存储。

    包含Makefile.include文件。

    也还可以定义APPS变量,包含所需的应用。

    10. Makefile.include

    The Makefile.include contains definitions of the C files of the core Contiki
    system. Makefile.include always reside in the root of the Contiki source tree.
    When make is run, Makefile.include includes the Makefile.$(TARGET) as well as
    all makefiles for the applications in the APPS list (which is specified by the
    project's Makefile).

    11. Makefile.$(TARGET)

    Makefile.$(TARGET), which is located in the platform/$(TARGET)/ directory,
    contains the list of C files that the platform adds to the Contiki system. This
    list is defined by the CONTIKI_TARGET_SOURCEFILES variable. The
    Makefile.$(TARGET) also includes the Makefile.$(CPU) from the cpu/$(CPU)/
    directory.

    12. Makefile.$(CPU)

    The Makefile.$(CPU) typically contains definitions for the C compiler used for
    the particular CPU. If multiple C compilers are used, the Makefile.$(CPU) can
    either contain a conditional expression that allows different C compilers to be
    defined, or it can be completely overridden by the platform specific makefile
    Makefile.$(TARGET).
  • 相关阅读:
    Canvas
    Web API 接口-JavaScript全部api接口文档
    编程中的命名设计那点事
    线程池的使用
    SRW锁的使用
    内存屏障
    VC用Beep整几首歌听听~~~
    简单的多线程并发同步演示(4种同步方法)
    C语言生成程序问题
    文件操作(输出倒数第二行、逆序输出)
  • 原文地址:https://www.cnblogs.com/songdechiu/p/6007820.html
Copyright © 2011-2022 走看看