Qt集成到VS2008中 ( Qt4.5.1 + qt-vs-addin-1.0.0 )

时间:2023-01-10 00:54:14

作者:yhf365

转自:http://blog.csdn.net/yhf365/article/details/4166596


   如何将Qt集成到VS中,网上已经有不少的文章。我前一段时间试了一下,花了三天时间,编译了好几次才算是完全编译成功,并把Qt4.5.1集成到了VS2008中。在这里把经验分享一下。

    1、首先确保VS2008安装好,我用的是VS2008英文版,最好不要用Express版的,因为如果用这个精简版本,qt-vs-addin装不上去。而且VS2008中文版我试过,qt-vs-addin不能用,不知道是怎么回事。

    2、下载qt-win-opensource-src-4.5.1.zip,(http://get.qtsoftware.com/qt/source/qt-win-opensource-src-4.5.1.zip),解压到某一个文件夹,如L:/qt-win-opensource-src-4.5.1。

    3、添加环境变量.如果你的登录名是administrator,则在“administrator的用户变量”中添加一个QTDIR,值为:L:/qt-win-opensource-src-4.5.1。另外,在“系统变量”中的Path变量中添加L:/qt-win-opensource-src-4.5.1/bin,用“;”隔开。如把Path值改成L:/qt-win-opensource-src-4.5.1/bin;%SystemRoot%/system32;%SystemRoot%;

    4、使用Visual Studio 2008 Command Prompt,进入Microsoft Visual Studio 9.0/Common7/Tools/目录下,执行vsvars32.bat,执行完,进入L:/qt-win-opensource-src-4.5.1。

    5、输入指令:configure -platform win32-msvc2008 -debug-and-release。 等一阵子,大概十几分钟,configure就会完成。这一步一定要注意,我前几次编译没通过都是因为configure参数出了问题。网上绝大多数帖子都说加上个static参数。我感觉这个静态编译参数没有必要,而且编译后体积太大。仅仅一个hello world控制台应用程序都快上M了。一个空的Qt GUI应用程序都好几M,虽然可以只用一个可执行文件就可以拿到别的机子上跑,可是如果有几个可执行文件,就很不划算了,每个都好几M,加起来会很臃肿,Qt官方文档中也不提倡这么做。还有,加上-static就无法编译通过。如果第一个理由不足以说服你放弃static,那第二个总可以了吧,呵呵。有两次,我加了static参数,头一次编译到webKit的时候报错,无法继续编译了。第二次,我用-no-webkit不编译webkit,可是到了Opengl又出问题了。提示说什么变量名冲突,结果又一次没编译通过。后来不用static就编译成功了。

   6、输入nmake。等上4-6个小时,就完成编译了。占用10G硬盘空间。

   7、这一步很重要,关系到是否能用qt-vs-addin。

把L:/qt-win-opensource-src-4.5.1下的.qmake.cache和configure.cache这两个文件手动备份到另一个地方。然后输入指令:

   nmake confclean;

   8、几分钟后,清理完成,那个文件夹会从10G锐减到700M,这个时候再把刚备份的.qmake.cache和configure.cache拷回原处。这时候最好把编译后的一堆东西打个包备个份,免得下次又要编译几个小时...打包之后只有207M

   9、安装qt-vs-addin (http://get.qtsoftware.com/vsaddin/qt-vs-addin-1.0.0.exe) 。

装完之后,打开VS2008,菜单栏会多出一个Qt选项,选择Qt选项下的Qt Options,在Qt Versions中添加路径,点击Add,选择路径L:/qt-win-opensource-src-4.5.1,OK。(如果第7步中没有备份并还原.qmake.cache和configure.cache这两个文件,这里是无法添加的)

   10、大功告成,辛辛苦苦编译了半天终于可以爽一把了。呵呵

红色的部分是特别需要注意的,这里搞好了就基本没什么问题了。

另外4-7都是在VS的命令提示符下完成的。至备份.qmake.cache和configure.cache这两个文件当然可以手动copy