Qmake的使用演示

From Qt Wiki
Jump to navigation Jump to search

Template:ArticleMetaData

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

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用来定义默认平台和包依赖性。

Download[edit | edit source]

File:QmakeEffect.zip