Qmake的使用演示
Qmake Overview[edit | edit source]
- 跨平台编译工具
- 读取工程源文件,生成依赖树 (dependency tree), 生成平台相关的工程和 makefile。
- 使得跨平台更编译更容易
- 减少手动的构造makefile的工作。
detail[edit | edit source]
本文通过一段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[edit | edit source]
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
- 又比如通过Pro文件在SIS文件中引入DLL, Shared Library DLLs on Qt for Symbian
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文件[edit | edit source]
在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用来定义默认平台和包依赖性。