4

我正在为 Symbian 应用程序开发一个 Qt。我必须使用某些特定于特定 S60 版本的特定平台 API。例如:

-S60 第三版 FP1 库: S60_common_lib、S60_3rd_ed_lib

-S60 第三版 FP2 库: S60_common_lib、S60_3rd_ed_lib、Symbian_common_lib

-S60 第 5 版库: S60_common_lib、S60_5th_ed_lib、Symbian_common_lib

-Symbian^3 库: S60_5th_ed_lib、Symbian3_lib、Symbian_common_lib

如您所见,某些库在多个平台之间共享。目前,我必须多次编译整个项目,以便为所有不同的 S60 平台获取单独的 .exe、资源等。我通过在 pro 文件中为每个平台定义一个标识符来做到这一点。例如:

# symbian 3
DEFINES += symbian_3_build
symbian:LIBS += # ...
# S60 3.1
# DEFINES += s60_fp1
# LIBS...

在实际代码中,我有类似的东西:

#ifdef symbian_3_build
    #include <some_s3_header.h>
#elseif s60_fp1
    #include <some_fp1_header.h>
#endif

所以我的问题是:

  1. 这是为 Symbian 应用程序编译多平台 Qt 的唯一方法(例如,有没有办法让它只使用一个 exe)?

  2. 我正在使用 Qt 创建者。在为一个平台编译后,我从 epoc 文件夹复制资源文件(.exe、.rsc、_reg.rsc),然后再编译到下一个平台(重建覆盖旧文件)。在所有版本都编译并收集到特定位置后,我将创建一个单独的 sis 文件,该文件根据平台安装不同的版本。这个过程很容易出错。有没有更好的方法来做到这一点?

谢谢。

4

1 回答 1

3

这是为 Symbian 应用程序编译多平台 Qt 的唯一方法(例如,有没有办法让它只使用一个 exe)?

这实际上取决于您的配置的最大公分母是什么。

至少您不必为每个配置修改 .pro 文件。只需在 qmake 命令行上提供额外的 CONFIG 值,例如qmake CONFIG+=symbian3,然后symbian3 { ... }在 .pro 文件中为 symbian3 特定部分提供块。

如果您想要单个二进制文件并且差异在于二进制兼容性级别,例如您正在链接到某些目标上不存在的 DLL 中的函数,您可以将这些函数调用分离到您自己的适配器组件,该组件动态加载所需的库与 nativeRLibrary::Load()RLibrary::Lookup(),基于底层平台版本。在运行时获取平台版本的一种方法是QSysInfo::s60Version().

于 2010-11-24T14:34:24.810 回答