RealEvo IDE专家模式下应用工程MakeFile的修改

1. 适用范围

    本文档适用于RealEvo IDE开发环境下的应用工程的自定义。

2. RealEvo IDE编译框架

2.1      Makefile文件与框架

    RealEvo IDE开发环境下使用的Makefile文件包含常规的Makefile和mk文件。Makefile一般用来指定整个工程的总体编译规则,而mk文件主要描述工程下常规的需要生产的目标的编译规则等。

  整个RealEvo IDE开发环境的编译框架主要是在BASE工程中定义的,主要存在于{$BASE}/libsylixos/mktemp路径下。主要有如表 21所示几个mk文件,分别对应几种工程的编译规则。

表 21  Makefile框架文件

Makefile

备注

application.mk

SylixOS APP工程对应的规则框架 

arch.mk

存放arch相关的编译变量

bsp.mk

SylixOS BSP工程对应的规则框架

clear-vars.mk

清除配置变量

common.mk

编译框架通用部分

dummy.mk

空框架

end.mk

编译框架尾部

extension.mk

SylixOS lite extension工程对应的规则框架

header.mk

编译框架头部

kernel-library.mk

SylixOS Kernel Static Lib工程对应的规则框架

kernel-module.mk

SylixOS Kernel module工程对应的规则框架

library.mk

SylixOS Share Lib工程对应的规则框架

libsylixos.mk

内核编译规则框架

lite-bsp.mk

SylixOS lite BSP工程对应的规则框架

static-library.mk

静态库工程对应的规则框架

unit-test.mk

SylixOS Unit Test工程对应的规则框架

 

2.2      APP工程编译框架

    SylixOS APP工程的路径如图 21所示。

图 21  SylixOS APP工程目录

    其中config.mk主要提供了两个编译变量,分别是SYLIXOS_BASE_PATHDEBUG_LEVEL,主要对应APP工程选择的BASE工程路径和Debug等级,在非专家模式下由APP工程的Properties->SylixOS Project->Base Setting中的选项控制,如图 22所示。

图 22  config.mk内容对应的IDE选项

    Makefile则指定了相关工程的具体编译框架,引用config.mk中的配置信息变量,指定工程编译的框架文件路径即2.1章介绍的文件存放路径,引用其中的header.mk,end.mk还有对应工程的Makefile(e.g SylixOS_APP.mk),如所示。

 

图 23  Makefile引用部分

    SylixOS_APP.mk是该工程的编译目标Makefile,指定了编译生成的目标、编译使用的源文件、编译需要的头文件路径、编译依赖的库、以及一些其他的编译选项配置,在非专家模式下由APP工程的Properties->SylixOS Project->Compiler Setting和Properties->SylixOS Project->Linker Setting中的选项控制,如图 24和图 25所示。

图 24  Compiler Setting选项卡

图 25  Linker Setting选项卡

2.3      Share Lib工程编译框架

    Share Lib工程与APP工程基本一致,唯一不同的是,APP工程的编译目标Makefile引用了application.mk,而Share Lib工程的编译目标Makefile引用的是library.mk。

3. 专家模式

    在对应工程的Properties->SylixOS Project->Base Setting下勾选Custom Makefile configuration并确认后就进入了Makefile的专家配置模式,如图 31所示。在该模式下IDE不会自动添加新加入的源码文件,对一些工程配置修改也不会直接写入对应的Makefile,全部需要人工的去修改调节,所以对SylixOS工程不熟悉的开发者不建议打开该选项。

图 31  开启专家模式

3.1      混合工程的建立与Makefile的修改

    在开发过程中往往会遇到一个工程会有很多应用程序和共享库的情况,最简单的方法是将这些应用和库拆分成独立的工程,但这样工程难于管理,特别是遇到移植三方件的时候,工程管理尤为重要,所以需要建立多应用与多共享库工程。

    拿OpenDDS的工程来说明,OpenDDS工程是一个典型的混合工程,有多个共享库和部分应用程序,其中库之间的依赖也相当复杂。OpenDDS的SylixOS工程如图 32所示,其中源码与头文件均按照其在Linux下的工程路径存放,方便编译时的源码文件的依赖正确。

图 32  OpenDDS工程

    由于对应工程的专家模式已经打开,IDE界面上设置选项已经全部失效,所以相关配置需要人工写入。

    混合工程的核心是多目标编译,这里遵循了RealEvo IDE的编译框架,通过添加多个编译目标Makefile并在工程通用Makefile下引用这些编译目标Makefile来实现多目标编译,这里需要注意这些编译目标Makefile的引用顺序会对应编译顺序,需要按照依赖关系排序如图 33所示。

图 33  通用Makefile引用编译目标Makefile

    在对应编译目标Makefile中需要修改一下几个宏,以及最后需要引用的编译目标类型。

    l  LOCAL_TARGET_NAME

    l  LOCAL_SRCS

    l  LOCAL_INC_PATH

    l  LOCAL_CXXFLAGS

    l  OCAL_DEPEND_LIB

    l  LOCAL_DEPEND_LIB_PATH

    用OpenDDS_Rtps.mk来举例。

   OpenDDS_Rtps.mk是针对libOpenDDS_Rtps.so这个共享库的Makefile,所以LOCAL_TARGET_NAME就需要指定为libOpenDDS_Rtps.so,如图 34所示。

图 34  LOCAL_TARGET_NAME配置

    修改LOCAL_SRCS为对应需要编译的源文件,如图 35所示,注意对应的源文件需要连带路径。

图 35  LOCAL_SRCS配置

    修改LOCAL_INC_PATH为需要包含头文件的路径,修改LOCAL_CXXFLAGS为对应的编译选项,修改LOCAL_DEPEND_LIB为需要依赖的库,修改LOCAL_DEPEND_LIB_PATH为依赖库所在的路径。如图 36所示。

图 36  其他相关配置选项

    LOCAL_USE_CXXLOCAL_USE_CXX_EXCEPT这两个选项对应的是启用C++工程和启用C++ except,由于这是C++库,所以都选择打开,如图 37所示。

图 37  C++工程相关配置

    最后因为是库工程所以需要选择引用library.mk,如图 38所示。

图 38  引用library.mk

    如果这是一个应用程序工程,则引用application.mk即可,如图 39所示。

图 39  引用application.mk


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章