×
Namespaces

Variants
Actions

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 08:54.
280 page views in the last 30 days.
×