PLATFORM BUILDER中的环境变量和选择性代码编译

//========================================================================
//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

你可能感兴趣的:(builder)