我正在为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
所以我的问题是:
这是为Symbian应用程序编译多平台Qt的唯一方法吗(例如,有没有办法让它只使用一个exe)?
我正在使用Qt创建者。在为一个平台编译之后,我在编译到下一个平台之前从epoc文件夹复制资源文件(.exe,.rsc,_reg.rsc)(重建覆盖旧文件)。在将所有版本编译并收集到特定位置之后,我将创建一个单独的sis文件,该文件根据平台安装不同的版本。此过程非常容易出错。有没有更好的方法呢?
感谢。
答案 0 :(得分:3)
这是为Symbian应用程序编译多平台Qt的唯一方法吗(例如,有没有办法让它只使用一个exe)?
这实际上取决于您配置的最大共同点。
至少您不必为每个配置修改.pro文件。只需在qmake命令行上提供额外的CONFIG值,例如: qmake CONFIG+=symbian3
然后在.pro文件中有symbian3 { ... }
块用于特定于symbian3的部分。
如果您想要单个二进制文件和,则差异在二进制兼容级别上,例如您链接到某些目标上不存在的DLL中的函数,您可以将这些函数调用分离到您自己的适配器组件,该组件使用本机RLibrary::Load()
,RLibrary::Lookup()
等动态加载所需的库,基于底层平台版本。在运行时获取平台版本的一种方法是QSysInfo::s60Version()
。