为Symbian编译多平台Qt应用程序

时间:2010-11-24 08:36:53

标签: qt symbian libraries multiplatform

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

-S60第3版FP1库: S60_common_lib,S60_3rd_ed_lib

-S60第3版FP2库: S60_common_lib,S60_3rd_ed_lib,Symbian_common_lib

-S60第5版libs: S60_common_lib,S60_5th_ed_lib,Symbian_common_lib

-Symbian ^ 3 libs: 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文件,该文件根据平台安装不同的版本。此过程非常容易出错。有没有更好的方法呢?

  3. 感谢。

1 个答案:

答案 0 :(得分:3)

  

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

这实际上取决于您配置的最大共同点。

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

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