日期:2014-05-17  浏览次数:20880 次

Windows环境下设置Qt编译环境 - 关于Qt的静态链接库的配置和生成方法

Windows环境下设置Qt编译环境 - 关于Qt的静态链接库的配置和生成方法
2010年08月08日
  最近,自己的工作发生了重大的变化,离开了已经工作了5年之久的Gameloft 上海studio。怎么说呢,说心情好?不好?哈哈。以后写出来吧。
  当下,自己有了更多的时间给自己做喜欢的事情,在此期间,我发现了Qt和wxWidgets,两个都十分power的framework。其他的废话不多说,先让我们看看如何建立Windows 环境下的Qt开发环境。
  1,计算机软件环境。
  操作系统: Microsoft Windows 7 旗舰版
  IDE: Microsoft Visual Studio 2005 Team Edition for Software Developers
  2,下载Qt吧。
  现在的Qt已经被Nokia公司收购,并且将原来的授权模式做了更改,目前分为开源版和商业版本。对个人用户来说,选择Open Source版本就足够了,不影响使用,只不过,我们需要比商业版Qt似乎要多做一些事情,或者说,开发过程变得更加"坎坷"吧。
  首先,Qt的官方网站http://qt.nokia.com,这里有你所需要的所有关于Qt的"家庭琐事",包括Qt及其资源,关于Qt的文档和一个官方的论坛。这样方便所有Qt用户能够更好的了解Qt,使用Qt。应该说,商业化的东西的确比Free software要做得好,一应俱全。
  Ok,我们单刀直入,打开这个链接:
  http://qt.nokia.com/downloads/windows-cpp-vs2008
  这里是windows环境下,visual studio 2005, 2008的开发环境下载页面,在这里能够下载到针对上述环境的Qt SDK,其中包括了所有代码和已经预编译好的framework文件列表。在写这篇blog的时候,我能够下载到的最新版本呢是ver:4.6.3。当您阅读这篇文章的时候,可能某些事情已经发生变化了。可这又能怎么办呢,我们处在一个千变万化的时代,不过我相信,您作为一名聪明的程序员,这点儿小玩意儿不在话下。
  然后接下来需要下载的是能够配合Visual C++ 2005的Add-In包。这个包是为了能将Qt整合到Visual C++中,包括配置,设计和编译Qt应用程序。打开如下的链接:
  http://qt.nokia.com/downloads/visual-studio-add-in
  并下载最新的qt vs add-in package。同样,我写这篇blog的时候,得到的版本呢是1.1.5。
  3,安装Qt
  这个操作其实比较简单,嘿嘿,我们一步一步来。
  首先,安装Microsoft Visual Studio 2005。可以按照默认的设置安装,也可以按照自己的需要安装这个IDE。不过,Visual C++ 2005是必须的(毕竟没有VC,咱啥也干不了。不是吗?)。
  接着,安装最新版本的DirectX SDK。需要安装DirectX SDK这个过程,的确一开始的时候,我自己也觉得很莫名其妙。但在后续的编译Qt库文件的时候,configure.exe文件会提示你需要这个SDK。反正....咱不管啦,安装先。
  接下来,主角出场了,我们需要安装Qt SDK。我默认设定将Qt安装在Y:\盘,这个也是我的工作习惯,几乎所有的开发工具和编译环境,或者framework我都安装在Y:\盘下。其安装目录为:
  Y:\Qt\4.6.3
  最后,我们需要安装的是qt的Visual C++的add-in包。这个安装路径可以自己随便定义。这个软件会在安装的时候,根据环境进行配置。
  4,编译Qt。
  到了这个时候,我们就需要自己编译Qt framework,可以根据我们自己的需要来编译。不过呢,事实上,我们可以不做这一步,不过,如果不做这一步的话,作为程序员的我们,需要付出一些......呃......代价。
  由于Qt的发行版本中,存在两种版本,LGPL版本和商业版本。这两个版本之间,从内容上看,应该是一模一样的,但要是这样的话。对于一般的商业用户来说,何必需要花钱去买商业版呢?哈哈。很明显,还是存在某些差异的,虽然在Qt的官方网站上并没有说明差异上的细节(只是说明一些开源代码和封闭代码的普通区别罢了)。但是事实上,开源版本的Qt对Windows Visual C++只是部分支持,并非完全支持。这个也的确在后面的开发过程中体现出来了。 比如,我们在VC中新建一个Qt工程并编译,其中,release版本的Qt程序能够完全运行,没有任何问题。但是debug版本的Qt程序并不能运行,无论是debug模式下运行还是在Windows环境下运行,都会跳出错误信息并自动退出。其原因就是在于,LGPL版本的Qt framework中并没有给出debug版本的library(这一招够狠的)。
  综合上述问题,我们需要花上一定时间和精力来编译Qt framework。
  在我自己一个人试图编译Qt的时候,发现始终无法成功的编译Qt系统;要么就是编译成功了,在开发Qt程序的时候,出现了链接失败的问题。现在我将给大家一个比较简单的方法来成功编译含有debug和release两种静态链接库的Qt framework。因此,注意,如果您想要使用动态链接库版本的Qt的话,请忽略这篇Blog。
  首先,我们可以利用Windows的控制台(console,或者命令行系统)批处理脚本来帮助我们实现整个编译的过程。在Qt的安装目录中,例如:Y:\Qt\4.6.3\,新建一个控制台批处理文件,可以将该文件命名为auto.bat。用文本编辑器打开该文件,敲入如下的命令:
  @echo off
  set QTDIR=%CD%
  set PATH=%PATH%;%QTDIR%\bin
  set QMAKESPEC=win32-msvc2005
  call "D:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat" x86
  call "D:\Program Files\Microsoft DirectX SDK (June 2010)\Utilities\bin\dx_setenv.cmd" x86
  call configure.exe -debug-and-release -static -qt-sql-odbc -qt-sql-sqlite -no-webkit
  cd src
  call nmake
  cd ..
  @echo on
  这里需要注意的是,我们必须要设定QMAKESPEC,这是告诉Qt,需要编译适合使用在哪个平台下的Qt,所有能够支持的Qt版本在Qt安装目录Y:\Qt\4.6.3\mkspecs中找到。另外一个需要注意的是,在调用VC和DX的设定环境变量批处理文件的时候,需要传入x86的参数。
  在开始编译Qt之前,第一需要调用的是Qt的configure.exe命令文件。在所有参数列表中,-debug-and-release是必须的,因为咱们之所以废这么大劲儿编译Qt,就是为了需要一个包含了debug 和 release 的 Qt framework库文件。因此不要忘了这个参数;另外-static参数也很重要,因为我们需要的是静态链接库文件。在后面的参数列表中,大家可以根据自己的需要,酌情加减参数。需要指出的是-webkit是用来编译第三方浏览器webkit的库文件,编译这个系统需要花费非常长的时间,我这里就把这个文件忽略了;因为Qt编译的时间非常长,大家可以考虑在configure的参数列表中加入参数-fast。
  输入完上述批处理命令之后,保存auto.bat文件。
  接下来,就需要修改Qt的编译选项了,为啥呢。因为Qt默认的编译对象为动态链接库,因此在编译配置文件中设置的都是针对dll类型的编译参数,但我们目前需要编译的是Qt的静态链接库。进入目录:Y:\Qt\4.6.3\mkspecs\win32-msvc2005,用文本编辑器打开该目录中的文件qmake.conf文件,寻找关键字"QMAKE_CFLAGS_RELEASE"和"QMAKE_CFLAGS_DEBUG",并将里面的参数-MD和-MDd分别修改成为-MT和-MTd,然后保存关闭文件。
  在晚上上面的工作之后,现在基本上都可以了,进入windows 控制台,进入Qt的安装目录,键入auto.bat进行编译。接下来的2~4个小时里面,我们就可以做自己的事情啦,看看书,睡个小觉都可以。
  5,测试
  经过漫长的编译过程,Qt总算编译好了,如果严格