2010-11-24 3 views
4

Symbian 어플리케이션 용 Qt를 개발 중입니다. 특정 S60 버전에서만 사용 가능한 특정 플랫폼 API를 사용해야합니다.Symbian 용 멀티 플랫폼 Qt 애플리케이션 컴파일

-S60 제 3 판의 FP1 libs와 : S60_common_lib, S60_3rd_ed_lib

-S60 제 3 판 FP2 libs와 : 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, Sy mbian_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. 이 심비안 애플리케이션을위한 멀티 플랫폼 Qt를 컴파일 할 수있는 유일한 방법입니다 (예를 들어 하나의 exe로만 작동하도록 할 수있는 방법이 있습니까?)

  2. Qt 생성자를 사용하고 있습니다. 하나의 플랫폼으로 컴파일 한 후, 다음 플랫폼으로 컴파일하기 전에 epoc 폴더에서 리소스 파일 (.exe, .rsc, _reg.rsc)을 복사합니다 (이전 파일을 오버웨어로 다시 작성). 모든 버전이 컴파일되고 특정 위치에 수집 된 후, 플랫폼에 기반하여 다른 버전을 설치하는 단일 sis 파일을 작성합니다. 이 프로세스는 오류가 발생하기 쉽습니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?

감사합니다.

답변

3

이 방법은 Symbian 응용 프로그램 용 멀티 플랫폼 Qt를 컴파일하는 유일한 방법입니다 (예 : 하나의 exe 만 사용하는 방법이 있습니까?).

구성의 가장 큰 공통 분모가 무엇인지에 따라 달라집니다.

적어도 각 구성에 대해 .pro 파일을 수정할 필요가 없습니다. qmake 명령 줄에 추가 CONFIG 값을 제공하면됩니다. qmake CONFIG+=symbian3 다음 symbian3 특정 부분에 대한 .pro 파일에 symbian3 { ... } 블록이 있습니다.

단일 이진 을 원할 경우 차이점은 이진 호환성 수준 (예 : 일부 대상에없는 DLL의 함수에 링크하는 경우 기본 플랫폼 버전을 기반으로 기본 라이브러리 RLibrary::Load(), RLibrary::Lookup() 등으로 동적으로 필요한 라이브러리를로드하는 사용자 고유의 어댑터 구성 요소로 이러한 함수 호출을 분리 할 수 ​​있습니다. 런타임시 플랫폼 버전을 얻는 한 가지 방법은 QSysInfo::s60Version()입니다.

+0

답장을 보내 주셔서 감사합니다. RLibrary 찾고 있었고 내 자신의 DLL을 유용하게 보인다. 그러나 내가 사용하고있는 API는 예를 들어 플랫폼 전용 API 일 수 있습니다. 이 경우 DLL의 구조에 대해 확신 할 수 없거나 .def 파일에 액세스 할 수 없습니다. – Routa

+0

@Routa : 자신의 래퍼 DLL (해당 개인 API DLL에 정적으로 링크 된)에서 DLL을 래핑 한 다음 래퍼 DLL을 동적으로로드 할 수 있습니다. – laalto

+0

그래서 기본적으로 모든 플랫폼에 대해 자체 래퍼 DLL을 만들어 설치해야합니다. Qt를 사용하여 이러한 다형성 DLL (내 자신의 래퍼)을 만드는 것이 가능합니까 ("일반"DLL을 만드는 방법을 알고 있습니다)? – Routa