使用预处理器时要考虑使用哪种构建

时间:2012-05-04 08:10:14

标签: facebook blackberry preprocessor blackberry-jde

我有一个项目需要在4.6和5.0版本的黑莓中使用。 我在4.6和5.0版本中都运行了相同的代码,并在代码中附加了一些预处理程序指令(我需要使用的#ifndef语句,因为在4.6版本中不支持facebook sdk) 我有2个.cod文件(一个用于4.6,另一个用于5.0) 他们在各自的模拟器中按需工作。

但是,当我将4.6的.cod文件加载到5.0中时...(它将它视为预处理器中的代码作为注释) 当我这样做时,反之亦然

即从5.0到4.6 ......它说...找不到projectname-1.cod。

此处也发布了一个类似的问题,请查看有关bbtool的评论说可能的情况 One build for two different versions (4.6,4.7 and 5.0+above) in blackberry

1 个答案:

答案 0 :(得分:2)

使用预处理器不是为不同的BB OS版本制作A SINGLE BUILD的方法(无论您使用哪种工具来准备构建)。

在编译/构建整个代码之前,预处理器仅用于根据提供的条件删除/添加特定部分代码。 更一般地,预处理器用于针对不同条件不同地考虑源代码。 更一般地,预处理器用于为不同条件产生不同的源代码。 在这种情况下,预处理器的范围仅在之前编译/构建代码... 而不是在之后构建代码并获得可执行文件/ .cod / ...等文件

阅读前几行T H E S E个链接;虽然这些是关于C-Preprocessors的,但基本也适用于此。

假设您的代码如下:

// START OF CODE
//#preprocess
// this is the second line of the code
//...
//#ifdef OS_5
import net.rim.device.api.ui.component.AutoCompleteField;
//#else
//don't import AutoCompleteField and import something else if needed
//#endif

//...
//... // some more codes
//...

//#ifdef OS_5
//...
//...
// Codes for using AutoCompleteField
//...
//...
//#else
//...
//...
// Codes for implementing AutoCompleteField another way by yourself
//...
//...

//...
//... // some more codes
//...
 // END OF CODE

使用什么工具构建代码(JDE,Eclipse或使用Ant)并不重要,如果使用预处理器'OS_5'构建(如果您的工具可以理解预处理器),则以下代码将是生成:

// START OF CODE
// this is the second line of the code
//...
import net.rim.device.api.ui.component.AutoCompleteField;

//...
//... // some more codes
//...

//...
//...
// Codes for using AutoCompleteField
//...
//...

//...
//... // some more codes
//...
 // END OF CODE

将使用上面的代码生成.cod文件。此.cod文件不会在小于5.0的BB OS版本上运行,因为OS 5支持 AutoCompleteField

如果你构建没有预处理器'OS_5'或其他预处理器 然后将生成以下代码:

// START OF CODE
// this is the second line of the code
//...
//don't import AutoCompleteField and import something else if needed

//...
//... // some more codes
//...


//...
//...
// Codes for implementing AutoCompleteField another way by yourself
//...
//...

//...
//... // some more codes
//...
 // END OF CODE

并使用上面的代码生成.cod文件,这将是与前一个文件不同的.cod文件。

现在,如果您要准备A SINGLE BUILD并成功部署不同的BB OS支持的设备,那么您必须在编码时remove dependencies,即仅使用所有操作系统支持的API类版本(4.6,5.0 ......以及其他如果你想要的话)。但有时候某些情况下非常困难,因为您可能需要编写自己的代码来实现某些功能。

为不同的操作系统准备不同的构建更容易 - 为此,您当然可以使用预处理器。


我担心我可能会以一种非常复杂的方式解释一件简单的事情。