×
Namespaces

Variants
Actions
Revision as of 05:54, 4 November 2011 by hamishwillee (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Qmake的使用演示

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata
Code ExampleTested with
Devices(s): Nokia 5800, N97, N8
Compatibility
Platform(s): S60 5th Edition symbian, symbian^3
Symbian
Article
Keywords: Qmake
Created: flycarl (08 Nov 2010)
Last edited: hamishwillee (04 Nov 2011)

Contents

Qmake Overview

  • 跨平台编译工具
  • 读取工程源文件,生成依赖树 (dependency tree), 生成平台相关的工程和 makefile。
  • 使得跨平台更编译更容易
  • 减少手动的构造makefile的工作。

detail

本文通过一段flash演示Qt for symbian平台上 Qmake 的效果。

  • Qmake自动生成 Qt 库的依赖语句。
  • 修改Pro文件中的UID3
symbian {
TARGET.UID3 = 0x20035CA1
}
  • Pro文件中添加对Qt webkit的支持
QT    += core gui webkit
  • Pro文件中添加对Qt Mobility的支持, 注意默认工程带CONFIG += mobility,由此产生对Qt Mobility的依赖,如果没有用到,注意去掉这两行 MOBILITY = 后是具体的mobility api,参见Qt Mobility 开发
CONFIG += mobility
MOBILITY =
  • Pro文件中向mmp文件添加语句
symbian {
myBlock = \
"SOURCEPATH somePath" \
"START RESOURCE someResource.rss" \
"TARGETPATH /private/10003a3f/import/apps" \
"END"
MMP_RULES += myBlock
}
  • Pro文件中使用Deployment 语句实现 pkg中 文件部署语句
myFiles.sources = music\*.amr
DEPLOYMENT += myFiles
  • 通过在Pro文件中指定Pri文件来定义图标,例如在‘C:\NokiaQtSDK\Examples\4.6\animation\animatedtiles\animatedtiles.pro’ 中包含了的symbianpkgrules.pri文件
symbian {
TARGET.UID3 = 0xA000D7D1
include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
}

DEPLOYMENT

DEPLOYMENT只用于 Windows CE 和 Symbian平台。 用于指定需要额外部署得到目标平台的文件。由于Symbian平台编译系统自动将二进制文件移动到epoc32目录下特定的文件夹中,因此,自定义插件,可执行文件,动态链接库需要特殊的处理。当部署额外的可执行文件或动态链接库是,目标路径必须是 \sys\bin。对于插件目标路径必须是 plugin stub部署的路径。参见How to Create Qt Plugins.如果二进制文件在源代码路径中没有找到,将搜索Symbian编译路径,例如\epoc32\release\armv5\urel.

  • 例如
customplugin.sources = customimageplugin.dll  customplugin.sources += c:\myplugins\othercustomimageplugin.dll 
customplugin.path = imageformats
dynamiclibrary.sources = mylib.dll helper.exe
dynamiclibrary.path = \sys\bin
globalplugin.sources = someglobalimageplugin.dll
globalplugin.path = \resource\qt\plugins\imageformats
DEPLOYMENT += customplugin dynamiclibrary globalplugin
symbian {
addFiles.sources = qtenginedll.dll
addFiles.path = /sys/bin
DEPLOYMENT += addFiles
}

如此Qmake后会在PKG文件中得到类似下面的代码。

; DEPLOYMENT
"c:/S60/devices/S60_5th_Edition_SDK_v1.0/epoc32/release/$(PLATFORM)/$(TARGET)/qtenginedll.dll" - "!:\sys\bin\qtenginedll.dll"

修改pkg文件

在Symbian 平台上,也可以用DEPLOYMENT精确修改PKG文件。可以使用pkg_prerules,pkg_postrules向PKG写入文本。 pkg_prerules中的语句写在打包文件前,pkg_postrules的文本写在打包文件主体后。pkg_prerules用来定义vendor信息,依赖性,自定义包头文件等。 pkg_postrules用来自定义文件部署,嵌入sis等。 pkg_prerules,pkg_postrules中定义的文本不能被qmake解析,要写成symbian包工具链识别的格式。

例如部署DLL,并增加一个依赖

somelib.sources = somelib.dll 
somelib.path = \sys\bin
somelib.pkg_prerules = "(0x12345678), 2, 2, 0, {\"Some Package\"}" \
"(0x87654321), 1, *, * ~ 2, 2, 0, {\"Some Other Package\"}"
justdep.pkg_prerules = "(0xAAAABBBB), 0, 2, 0, {\"My Framework\"}"
DEPLOYMENT += somelib justdep
注意 pkg_prerules可以替代pkg文件中的默认声明。如果没有定义pkg_prerules,qmake自己保证PKG文件语法正确,且包含所有永久声明如
  • 语言,例如
 &EN,FR
  • 打包文件头部,例如
 #{"MyApp-EN", "MyApp-FR"}, (0x1000001F), 1, 2, 3, TYPE=SA
  • 本地化及唯一厂商,例如
 %{"Vendor-EN", ..., "Vendor-FR"} :"Unique vendor name"

如果你替换了上面的声明,需要注意其他声明依然有效。例如你覆盖了语言声明,你必须自己重写其他语言相关的声明。

在Symbian平台上Qt工程会生成3种pkg文件:

  • <app>_template.pkg - 用来生成应用程序的SIS文件. 规则后缀: .main
  • <app>_installer.pkg - 用来生成包含smart installer的SIS文件 . 规则后缀: .installer
  • <app>_stub.pkg - For ROM stubs. 规则后缀: .stub

不带后缀的pkg_prerules ,pkg_postrules文件会智能的运用到以上所有pkg文件,要修改当个pkg文件需要加后缀:

my_note.pkg_postrules.installer = "\"myinstallnote.txt\" - \"\", FILETEXT, TEXTCONTINUE" 
DEPLOYMENT += my_note

在Symbian平台上,default_deployment用来定义默认平台和包依赖性。

Download

File:QmakeEffect.zip

This page was last modified on 4 November 2011, at 05:54.
441 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×