2010-11-24 2 views
4

Я разрабатываю приложение Qt для Symbian. Я должен использовать определенные API для конкретной платформы, которые доступны только на определенной версии S60. Например:Компиляция многоплатформенного приложения Qt для Symbian

-S60 3rd Edition FP1 ЛИЭС: S60_common_lib, S60_3rd_ed_lib

-S60 3rd Edition 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, Sy mbian_common_lib

Как вы можете видеть, некоторые библиотеки разделяются между несколькими платформами. В настоящее время мне приходится составлять целый проект несколько раз, чтобы получить отдельный .exe, ресурсы и т. Д. Для всех разных платформ S60. Я делаю это, определяя идентификатор для каждой платформы в файле 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. Это единственный способ собрать мультиплатформенной Qt для приложения Symbian (например, есть ли способ заставить его работать только с одним exe)?

  2. Я использую создателя Qt. После компиляции для одной платформы я копирую файлы ресурсов (.exe, .rsc, _reg.rsc) из папки epoc перед компиляцией на следующую платформу (rebuild перезаписывает старые файлы). После того, как вся версия была скомпилирована и собрана в определенном месте, я создам создать один файл sis, который устанавливает другую версию на основе платформы. Этот процесс очень подвержен ошибкам. Есть ли лучший способ сделать это?

Спасибо.

ответ

3

Это единственный способ собрать многоплатформенное Qt для Symbian-приложения (например, есть ли способ заставить его работать только с одним exe)?

Это действительно зависит от того, что является самым большим общим знаменателем ваших конфигураций.

По крайней мере, вам не нужно изменять файл .pro для каждой конфигурации. Просто добавьте дополнительные значения CONFIG в командной строке qmake, например. qmake CONFIG+=symbian3, а затем есть symbian3 { ... } блоков в .pro-файле для частей, специфичных для symbian3.

Если вы хотите использовать один двоичный код и, различия находятся на уровне совместимости двоичных файлов, например. вы связываетесь с функциями в DLL, которые не присутствуют на какой-либо цели, вы можете разделить эти вызовы функций на свой собственный компонент адаптера, который динамически загружает требуемые библиотеки с помощью родных , RLibrary::Lookup() и т. д. на основе базовой версии платформы. Один из способов получить версию платформы во время выполнения - QSysInfo::s60Version().

+0

Спасибо за ответ. Я смотрел RLibrary, и, похоже, это полезно для моих собственных DLL. Однако API, который я использую, может быть, например, частным API-интерфейсом платформы. В этом случае я не могу быть уверен в структуре DLL или иметь доступ к файлу .def. – Routa 2010-11-25 07:09:45

Смежные вопросы