环境变量和选择性代码编译

//========================================================================
//TITLE:
//    环境变量和选择性代码编译
//AUTHOR:
//    norains
//DATE:
//    Moday 17-November-2008
//Environment:
//    NONE
//========================================================================
    其实这篇文章的完整标题应该是:《PLATFORM BUILDER中的环境变量设置和选择性代码编译》,只是这样似乎有点冗长了。:-( OK,我们先不用管标题怎样才能恰如其分表达意思,还是现在看一个例子:
   
    假设我们有一个触摸屏驱动程序代码,然后又有两片板子,板A需要反转X坐标,板B则在板A的基础上还要反转Y坐标。以代码的作为考量,大致如下:
   
    #ifdef REVERSE_X
     *x = MAX_X - *x + MIN_X;
    #endif
   
    #ifdef REVERSE_Y
     *y = MAX_Y - *y + MIN_Y;
    #endif
   
    对于板A而言,需要在代码中进行如下宏定义:
    #define REVERSE_X
   
    而板B,则是如此:   
    #define REVERSE_X
    #define REVERSE_Y
   
    也就是说,如果我们需要给板A编译系统,则要定义REVERSE_X宏;如果是给板B,就是REVERSE_X和REVERSE_Y。那么,带来的问题很明显:每次我们需要给不同板子编译系统的时候,都要更改代码!也许你会不觉得什么,但想像一下,如果类似这样需要定义宏的地方不止一处;即使只有一次,你能确保每次编译之前都会记得修改代码么?
   
    如果这些宏能够有PB的project确定,只要我们在初始建立project的时候花费一下脑力,之后只要闭着眼每次都只是点选一下sysgen,难道不是非常美好的事情?
   
    其实话说回来,pb中的很多catalog item都是定义了环境变量而已。
   
    好吧,那么我们就给触摸屏驱动也来个选择行编译吧!
   
    首先,用Platform Builder CEC Editor打开你BSP的cec文件----呃,当然,你用记事本打开也可以,只要你不嫌麻烦。然后在触摸屏驱动下面添加两个catalog item,如图1:
   

    在相应的catalog item中定义Variable:图2:。


    
    图中是FeatureVariable,当然你也可以定义Variable,在本文所起到的作用是一样的。如果用记事本打开cec文件,写法是有所区别:
    Variable( "REVERSE_X", "1" )
    FeatureVariable( "REVERSE_X", "1" )
   
    不过在这里我们可以忽略两者的细微的差别。
   
    当我们定义好这两个catalog item之后,在pb中删除原来的bsp,然后再重新导入,就能在右边看到有相应的选项。这时候,我们就可以将其添加到我们的工程文件中了。
   
    接下来,就是更改source文件。我们所需要的是,判断环境变量是否存在,如果存在则定义相应的C/C++宏。在source中添加代码段如下:
   
    !IFDEF REVERSE_X
    CDEFINES=$(CDEFINES) -DREVERSE_X  
    !ENDIF
   
    第一个REVERSE_X是环境变量,第二个是定义的C/C++宏。注意,在REVERSE_X之前有标示“-D”,是紧挨着所定义的宏之前。
   
    好了,就这么简单,就能够以环境变量来对代码进行选择性编译了。
   
    如果不放心,还可以在代码中增加此段来测试:
    #ifdef REVERSE_X
     #error "Have defined REVERSE_X"
    #endif

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值