【问题标题】:Which build to be considered for use when a preprocessor is used使用预处理器时要考虑使用哪个构建
【发布时间】:2012-05-04 21:17:36
【问题描述】:

我有一个项目需要在 4.6 和 5.0 版本的黑莓中使用。 我在 4.6 和 5.0 版本中运行了相同的代码,并在代码中附加了一些预处理器指令(我需要用于 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 not found .

这里也发布了一个类似的问题,请查看 bbtool 上的评论说它是可能的 One build for two different versions (4.6,4.7 and 5.0+above) in blackberry

【问题讨论】:

  • 您必须针对不同的操作系统进行不同的构建(.cod/.jad 文件)才能部署特定于操作系统的功能。预处理器仅用于指示在构建项目时要保留/删除代码的哪一部分。对于代码//#ifdef some_condition some_code,如果some_condition 失败,则在打包项目时(在制作.cod 之前),JDEEclipse 会删除这部分代码some_code .因此,一旦构建了项目,即创建了 .cod 文件,预处理器就没有更多功能了。
  • 如果我不想通过使用 Ant 来实现它.. 可以实现吗?只有一个版本我在stackoverflow.com/questions/10442995/… 发布了这个问题@HeartBeat:

标签: facebook blackberry preprocessor blackberry-jde


【解决方案1】:

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

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

阅读THESE链接的前几行;虽然这些是关于 C 预处理器的,但基本的也适用于此。

假设你的代码如下:

// 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 文件。

现在,如果您想准备@9​​87654337@ 并成功部署它支持不同的 BB OS 设备,那么您必须在编码时remove dependencies,即仅使用所有操作系统版本(4.6、 5.0 ...和其他,如果你想)。但有时在某些情况下这非常困难,因为您可能必须编写自己的代码来实现某些功能。

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


恐怕我用非常复杂的方式解释了一件简单的事情。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-31
  • 2011-11-10
  • 2010-09-18
  • 2021-05-22
  • 1970-01-01
相关资源
最近更新 更多