Mtk功能机,项目编译与宏控制

流程简介

  • 声明一个开关
  • 检测到开关,定义宏
  • 宏控制着代码的引入编译

声明一个开关

  • 文件:EC618AE_ENG_GPRS.mak (make)
  • 代码:
    POS_XXX_APP = TRUE
  • 代码逻辑:打开开关: POS_XXX_APP

检测到开关,定义宏

第一个宏
  • 文件:Option_HAL.mak (make)
  • 代码:
    ifdef POS_XXX_APP
      ifeq ($(strip $(POS_XXX_APP)),TRUE)
        COM_DEFS    += __POS_XXX_APP__
      endif
    endif

代码逻辑:如果打开了开关:POS_XXX_APP ,定义宏:

__POS_XXX_APP__
第二个宏
  • 文件:MMI_features.h (plutommi\mmi\inc)
  • 代码:
// 第一处,定义加MMI前缀的宏
#if defined(__POS_XXX_APP__)
    #ifndef __MMI_POS_XXX_APP__
    #define __MMI_POS_XXX_APP__
    #endif
#endif
  • 代码逻辑:定义加上 MMI 前缀的宏:
__MMI_POS_XXX_APP__

到此,宏定义完成,接着是用宏控制代码的引入编译

以 TOPQRPAY 这个应用为例,定义的宏为:

 __MMI_POS_TOPQRPAY_APP__
头文件和源码文件的引入编译:
  • Mmi_app.mak (make\plutommi\mmi_app)
  • 代码:
    ifneq ($(filter __MMI_POS_TOPQRPAY_APP__ , $(strip $(MODULE_DEFS))),)
        SRC_LIST += plutommi\mmi\TopQRPay\TopQRPaySrc\TopQRPayMain.c \
                    plutommi\mmi\TopQRPay\TopQRPaySrc\TopQRPayScrnInquiry.c \
                    。。。。。。
                    plutommi\mmi\TopQRPay\TopQRPaySrc\TopQRPayNfcSearch.c
    endif
    
    ifneq ($(filter __MMI_POS_TOPQRPAY_APP__ , $(strip $(MODULE_DEFS))),)
        INC_DIR += plutommi\mmi\TopQRPay\TopQRPayInc
    endif

    ifneq ($(filter __MMI_POS_TOPQRPAY_APP__ , $(strip $(MODULE_DEFS))),)
        SRC_PATH += plutommi\mmi\TopQRPay\TopQRPaySrc
    endif 
  • 代码逻辑:如果发现开关:MMI_POS_TOPQRPAY_APP ,就引入 TopQRPay 项目的头文件和源码文件
资源文件的引入:
  • 文件:Mmi_pluto_res_range_def.h (plutommi\mmi\inc)
  • 代码:
    #ifdef __MMI_POS_TOPQRPAY_APP__
    MMI_RES_DECLARE(APP_ID_TOPQRPAY, 400, ".\\MMI\\TopQRPay\\TopQRPayRes\\")
    #define TOPQRPAY_BASE                    ((U16) GET_RESOURCE_BASE(APP_ID_TOPQRPAY))
    #define TOPQRPAY_BASE_MAX                ((U16) GET_RESOURCE_MAX(APP_ID_TOPQRPAY))
    #endif
  • 代码逻辑:如果发现开关:MMI_POS_TOPQRPAY_APP ,就引入 TopQRPay 项目的资源文件
  • 并且声明 APP_ID_TOPQRPAY 指向 TopQRPay 项目的资源文件
  • 声明两个宏:TOPQRPAY_BASE ,TOPQRPAY_BASE_MAX 表示 APP_ID_TOPQRPAY 的基本值和最大基本值
资源文件的id声明
  • 文件:TopQRPayRes.res( plutommi\mmi\TopPandaPay\TopPandaPayRes ) // 资源文件的本体
  • 文件:TopQRPayRes.c (plutommi\customer\resgenerator\temp\res) // 编译时生成的临时文件,代码跟本体一样
  • 代码:
#include "mmi_features.h"
#include "custresdef.h"

/* Need this line to tell parser that XML start, must after all #include. */




    
    
    

    
    
    。。。。。。
    
    
    。。。。。。
    
    。。。。。。
    CUST_IMG_PATH"\\\\MainLCD\\\\TopQRPay\\\\union_icon.png"
    CUST_IMG_PATH"\\\\MainLCD\\\\TopQRPay\\\\topqrpay_mainmenu_bg.jpg"
    。。。。。。
    
    
    。。。。。。
    
     [0x00, 0x00] 
    
    。。。。。。
    
        TOPQRPAY_MENU_ID_LOGIN_SETTING_2_MIN
        。。。。。。
    

    
    。。。。。。
    

  • 代码逻辑:定义了字符串,屏幕,TIMER,IMAGE,AUDIO,MENU,
    RECEIVER等的id

然后就是在.h和.c文件中,用宏控制代码段是否引入编译

你可能感兴趣的:(Mtk功能机,项目编译与宏控制)