使用Visual Studio 2012 / Visual Studio 2013构buildQt5,并与IDE集成
你如何获得Qt5下载并与Visual Studio 2012集成? 你遇到的一些问题是什么?你如何解决这些问题?
更新重新。 Visual Studio 2013
Visual Studio 2013也报告了成功,并且维护了VS 2013的注释。
另外请注意, 这个问题的重点强调的只是用Visual Studio 构build Qt。 还有关于与Visual Studio IDE集成的说明
此方法已经过testing,可在Visual Studio 2013上运行。使用Visual Studio 2012和2013的预构build二进制文件在这里可用,包括OpenGL版本。
第1步:设置
-
在这里下载并安装RapidEE。 RapidEE是一个Windows环境variables编辑器。 这对于这个过程的其余部分是非常有用的(一般而言)。
-
安装DirectX 11 SDK。 它现在是Windows 8 SDK的一部分,所以你首先必须安装DirectX 10 SDK,你可以在这里获得(但是在下一句中会看到警告)。 如果安装了Visual C ++ 2010 Redistributable Package,并且可能会这样做(它将随VS 2010一起自动安装),请按照此处列出的步骤协助安装DirectX 10。 安装DirectX 10 SDK后,请下载并安装Windows 8 SDK(包含DirectX 11 SDK)。 是的,这是一个痛苦,但除非你知道你有DirectX 11 SDK,Qt构build将失败 。
-
从Python.org或Anaconda Python安装用于Windows的Python(我听说2.6+,使用3.3)。
-
从ActiveState安装Perl for Windows。
第2步:select (和build设) Qt5 (是的, 这意味着Git )
-
请参阅qt-project网站上的Windows安装指南 。
概要
总结上述链接和下面的注意事项(如果你有任何错误,请看下面的注意事项;他们可能会被回答):
-
卸载Avast(如果你已经安装了这个)来避免构build错误。 是的,这意味着卸载它。 从系统中删除它100%。 取消激活它将不起作用 。 见下面的详细说明。
-
注意第一步 :不要使用SmartGit作为下面的第一个
git
pull(除非你真的知道你在做什么),因为SmartGit的默认值将会把所有东西都拉出来,而这不是你想要的。 -
必须安装Git for Windows 。
-
确定要安装
Qt
,然后从任何命令提示符窗口进入包含新安装的目录。 (因为这个过程非常脆弱和容易出错,我个人直接把它放在C:
,但这可能不是必须的)。 -
从上面的目录中,执行:
git clone git://gitorious.org/qt/qt5.git qt5
这很快。 一旦完成,你应该在'stable'分支上,但是你可以在
cd
进入新创build的qt5
目录后始终运行git checkout stable
。 使用git checkout 5.4.1
被确认与VS2013 64位一起工作。 -
在进入下一步之前, closures当前的命令提示符窗口 (如果它不是Visual Studio命令提示符窗口)。 这是为了确保您在接下来的步骤中使用Visual Studio命令提示符窗口。
-
接下来运行32位(x86)或64位VS工具命令提示符(取决于您是否将Qt5构build为32位或64位)。 要访问它,你必须通过开始菜单find它 – 进入
Program Files
– >[Microsoft] Visual Studio 2012/2013
– >Visual Studio Tools
,你会看到它有一个有趣的名字; 该名称应该包括“Native Tools
”一词; 32位版本的名称中将包含x86
,而64位版本的名称中将包含x64
。 -
从上面的步骤
cd
到新创build的qt5
目录中。 -
从Visual Studio命令提示符中,必须下载其余的Qt子模块:
perl ./init-repository --no-webkit
执行这一步需要花费一些时间,因为它需要下载很多,但是一个体面的连接并不是太糟糕。
-
然后下载
init-repository
不能下载的任何剩余可选子模块 – SmartGit只能在此阶段开始运行(请参阅下面的注释)。 -
一旦Qt的下载完成,下面的命令准备构build环境(它也应该使用[32 | 64] VS本机工具命令提示符执行):
configure -developer-build -opensource -confirm-license -mp -nomake examples -nomake tests -debug-and-release -c++11 -no-warnings-are-errors -platform win32-msvc2012
。关于这个命令行的注意事项:VS2012编译器可能不需要
c++11
选项,但可以与VS2013一起使用; 如果您在64位自动构build的ANGLE上遇到错误,则需要-no-warnings-are-errors
;-platform
自动设置为win32-msvc2012
,因此默认情况下使用Qt的32位版本,并且可能不需要在命令行提供平台(如果安装了先前版本的VS,则为EVEN)。 对于VS2013,请使用-platform win32-msvc2013
。执行这个步骤需要几分钟的时间,但并不是那么糟糕。
-
最后,在系统上实际构buildQt的命令(也可以在VS本地工具命令提示符下运行)很简单:
nmake
预计等待几个小时的构build完成。 如果你用
-prefix
指定了一个输出文件夹(见下面的注释),那么使用nmake install
,否则就是这样。
-
笔记:
一般注意事项
如果您对以上链接的文档感到困惑,只需使用ANGLE库(默认情况下)而不是OpenGL,这就是为什么您必须安装上述DirectX 11的原因。
确保使用VS Native Tools命令提示符运行上述链接(即, perl .\init-repository --no-webkit
, configure
和nmake
)中的所有命令。 您将使用[32 | 64]位命令提示符( x86
或x64
),具体取决于您是否将Qt构build为32位或64位。 如果您安装了打开命令提示符的perl(确保它位于PATH
),则需要重新启动命令提示符以将perl识别为命令。
当运行“init-repository”(从上面的链接中的步骤),它不是从文档中清楚,但你必须通过perl
来执行; 即perl ./init-repository --no-webkit
。 然而, configure
和nmake
命令是直接调用的。
传递给configure
一个非常有用的选项是-mp
,这会导致Qt在多个内核上并行构build,显着加快了构build时间。
要指定输出文件夹,请将-prefix [outfolder]
添加到configure
命令。 例如,对于64位Visual Studio 2013(12.0)版本,使用-prefix %CD%\output\x64\vc12
将是合适的输出(子)文件夹。
Unicode支持(ICU)
如果您需要Unicode支持(通过ICU ),请特别注意上述链接中提到的指示。 总之,必须在VS 2012中重新构buildICU,因为针对Windows的唯一预构build的ICU二进制文件适用于VS 2010. VS VS 2012中的构build是无痛的 – 只需在ICU解决scheme(.sln)中find<icuroot> \ icu \ source \ allinone,并build立debugging和释放模式(无论是在32位或64位模式,这取决于你build立Qt的模式 – 不要build立在另一位,因为ICU将覆盖输出文件夹二进制文件)。 (Qt构build过程将正确地定位ICU的debugging版本和发行版本。)它应该没有错误地构build。 然后,将<icuroot> \ lib的path作为string条目添加到称为“LIB”的(可能是)新的Windows环境variables中(可以使用Rapid EE;在RapidEE中使LIB成为“可扩展string” 1条目),并添加path到<icuroot> \ include作为一个string入口(可能)新的Windows环境variables名为“INCLUDE”。 (注意:将这些path添加到PATHvariables将不起作用。)Qt构build完成后,可以删除刚才添加的所有这些条目。 此外, 将运行时path添加到环境的PATHvariables,或Qt构build过程(特别是,当uic.exe
运行时)的ICU DLL的(<icuroot> \ bin)会给出一个欺骗性和误导性的错误 。 最后,在configure
命令行(如下)中,确保添加-icu
作为附加的命令行参数。
ICU失败 :
目前,当ICU被启用时,似乎有一个用VS2012编译器构buildQt5的bug。 具体来说, qtbase\src\corelib\codecs\qtextcodec.cpp
行688(Qt5 v5.02)无法返回编解码器名称“US-ASCII”(编解码器为空)的编解码器,导致“lrelease.exe”崩溃试图稍后解引用编解码器(我已经失去了该文件/行号的跟踪,但它是NULL codec
variables的明显取消引用)。 不幸的是,这意味着据我所知, WebKit不能用VS2012编译器(至less是32位版本)构buildQt5 ,因为WebKit需要ICU。
如果任何人都可以用启用了ICU的VS2012编译器构buildQt5,请更新这个Wiki。
ICU澄清 :
如果你有ICU的话,Qt会自动build立它。 换句话说,标志“ -icu
”隐含在那里。 但是,这会导致上述“lrelease.exe”错误。 所以解决这个问题的办法是在configure命令中添加-no-icu标志
其他子模块
如果除了缺省子模块外还需要子模块,则可以在完成init-repository
命令后使用SmartGit(或命令行)。 SmartGit可能是最简单的,因为您不需要将path复制到命令行,但可以直接使用用户界面。
警告:不要下载可选的qlalr
模块 ,因为它不会与Qt的整体构build结合在一起,对于Qt用户来说不是必需的,而只是用于内部Qt开发。
警告:必须使用shell命令行,后跟perl .\init-repository --no-webkit
(NOT SmartGit)。 这些步骤将正确地只下载默认的Qt子模块。 您不能使用SmartGit从git://gitorious.org/qt/qt5.git
克隆和下载Git文件,因为SmartGit当前不能正确处理子模块。 相反,打开一个标准的Windows shell命令提示符(使用任何命令提示符应用程序,不一定是VS工具命令提示符),(假定Git已正确安装在系统上; SmartGit安装可能会或可能不会自动执行;如果它不,去Git for Windows并直接安装)直接从命令行inputgit clone git://gitorious.org/qt/qt5.git
; 也许遵循这个与git checkout stable
(我不知道这个分支默认检出); 然后使用命令行perl .\init-repository --no-webkit
下拉DEFAULT存储库(WebKit除外,这需要ICU和ICU看起来不能使用VS2012在32位Qt5中构build;请参阅注释)。
因此下载所有必要的Qt源文件的步骤是:1.使用Windows命令行来执行初始的git clone git://gitorious.org/qt/qt5.git
; 2.从VS Tools 2012命令提示符中执行perl .\init-repository --no-webkit
; 然后可以select使用SmartGit(从上面的链接)(或同等学历)“打开一个现有的项目”(selectQt5的根文件夹),并从SmartGit内执行下拉任何非默认存储库(但不要下载qlalr
)。 而已; 你的系统上有所有必要和可选的Qt文件(包括子模块)。
如果有人发现其他可选子模块无法构build和/或仅供内部使用(除了qlalr
),请更新此Wiki以指定它们。
通常,通过perl .\init-repository --no-webkit
获得的默认子模块就足够了。 如果您知道或后来发现其他(非默认)模块,您可以随时添加它们。
一般问题
如果在某个时候出现错误,提示“python”(或类似的东西)没有被识别,只要检查包含python.exe
(或相应的.exe
)的文件夹是否为pathvariables的一部分。 如果不是,请添加它(如上所述,为了方便,请使用RapidEE),然后尝试您正在做的事情。 如果存在,请确保在将命令添加到path之后重新启动了命令提示符。
还有两个与path相关的问题需要注意(引自与上面链接相关的文档):“ 确保在msysgit提供的perl可执行文件之前的path中find了perl可执行文件,因为后者已经过时 ”。 和“ 你可能无法build立如果sh.exe在你的path(例如,由于git或msys安装)。这样的错误是由qt5-srcqtbasebinqmake.exe:命令未find和类似的指示在这种情况下,请确保sh.exe不在你的path中,如果你的安装已经被configuration,你将不得不重新configuration。
在这个过程中,你可能会遇到一个文件上使用nmake
的错误。 如果你这样做,只要进入该目录并强制构build问题文件。 然后再在Qt5上开始nmake
进程。
具体问题
警告:您可能需要在Qt nmake
进程中禁用防病毒软件和SANDBOXING (并且在整个过程中为了安全起见)。 在内部,Qt执行一些防病毒程序可能会干扰的可执行文件(有时候会默默地执行)。 特别是,如果您有任何沙盒软件,请务必禁用沙盒。
警告: AVAST! 沙盒用户:Avast沙盒即使在禁用Avast的自动沙箱时也会出现问题,沙箱不会closures,它将静默地沙箱化Qt构build过程中由Qt的rcc
程序自动创build的所有资源文件。 任何安装了Avast autosandboxfunction的用户,即使有AUTO-SANDBOXING TURNED OFF,Qt build都会失败。 要克服这个问题的唯一途径就是完全解除安慰! 在构buildQt之前从您的系统。 你可以重新安装Avast! 在Qt构build完成之后。
Qt5的编译可能需要很长时间(小时,即使使用-mpmultithreading选项)。 忍耐。
第3步:将Qt5与Visual Studio 2012集成
-
下载并安装Visual Studio Qt5插件 。 它位于页面底部附近的“其他下载”部分,不适用于Visual Studio Express。
-
打开Visual Studio 2012,然后转到
Qt Options
(位于顶部菜单栏的“Qt5”下)。 -
在Qt版本选项卡中,检查Qt5是否已经存在。 如果不是,点击添加,select一个版本名称(可能是一个名字,如5.xx),然后导航到包含
qmake.exe
的文件夹(通常是C:\Qt\qt5\qtbase
)。 -
退出Qt选项对话框。
-
创build一个新的Visual Studio项目。 当你看到New Project对话框时,你应该看到
Qt5 Projects
Template选项。 -
一旦你有了新的Qt项目,右键点击它并select“转换到QMake生成的项目”。 构build项目,然后再次右键单击并select“将项目转换为Qt插件项目”。 再次build立,然后运行。 你现在应该有一个有效的Qt项目。
将Qt5添加到现有的Visual Studio 2012 VC ++项目中
本节可能会或可能不会为您工作。 如果遇到问题或有其他更好的解决scheme,请留下评论或编辑适当的步骤。
-
在VS中右键单击你的项目,select“卸载项目”。 再次右键单击该项目,然后select“编辑[项目名称] .vcxproj”。 这将打开项目文件,所以你可以添加Qt5。
-
进入Global PropertyGroup,添加或更改
<Keyword>
到Qt4VSv1.0。 -
重新加载项目,然后右键单击并select“将项目转换为Qt插件项目”
-
等待转换完成(不超过几秒钟),然后select
Qt5>Project Settings
。 转到Modules选项卡,并检查你希望项目依赖的模块(基本的是Core
,Widgets
和GUI
)。 -
按照这里的步骤,添加目录
$(QTDIR)\include
。
笔记:
如果在任何时候你包含
windows.h
,你需要在#define NOMINMAX
之前先#define NOMINMAX
,以避免与qdatetime.h
冲突。完成上述步骤后,您可以通过select
Qt5>Create basic .pro file
来使您的项目可以被Qt Creator使用。
结束注释:如果您有与本指南中包含的信息有关的问题,请将其作为新问题发布(此处不是答案),并且可能会添加答案或答案的链接。
我成功地在Windows 7上基于Dan Nissenbaum的优秀文章(Thanks,Dan!)成功地将Qt 5.0.2与Visual Studio 2012集成在了一起,并且也在这个qt-project链接上 。 由于我以稍微不同的方式完成了一些步骤,因此我认为在这里发布它是有效的:
下面的顺序应该按照给定的顺序执行:
0 – 卸载Avast(如果你有这个安装),以避免造成错误。 由于Avast bug,停用它将不起作用;
1 – 安装Git(> = 1.6.x);
2 – 安装Python(> = 2.6.x)。 [python.org];
3 – 安装Perl(> = 5.14)。 [activestate.com];
4 – 安装Ruby。 [rubyinstaller.org];
5 – 打开正常的Windows 7命令提示符(现在不要使用VS2012开发人员命令提示符);
6 – 为qt5select你想要的任何目录,关于没有空间允许select的path。 我决定使用path“C:\ qt5”;
7 – 在正常的Windows 7命令提示符(在我的情况下,提示“C:\ qt5>”)键入:
git clone git://gitorious.org/qt/qt5.git qt5
8 – 检出稳定版本:
cd qt5 git checkout stable
9 – 您可能会收到确认此版本已稳定的消息。 closures命令提示符;
10 – 打开Visual Studio的开发人员控制台(所有程序> Visual Studio 2012> Visual Studio工具> VS2012开发人员命令提示符) ,并将当前目录更改为您select的目录(在我的示例中为“C:\ qt5”)。
11 – 下载Qt submodules,忽略webkit(常见的编译错误源码):
perl .\init-repository --no-webkit
12 – 现在input这个巨大的命令来正确configuration你的构build:
configure -developer-build -opensource -nomake examples -nomake tests -nomake demos -debug-and-release -c++11 -mp -nomake webkit -confirm-license
13 – 接下来,确保模块qlalr 不会被build立。 要做到这一点,打开Windows资源pipe理器,并导航到您select的Qt目录(在我的例子中的“ C:\ qt5 ”),并检查文件夹qlalr是否存在。 如果是这样,删除它;
14 – 构build时间…可能的构build错误将来自辅助模块(如webkit),这不会影响主要的Qtfunction(webkit本身不应该是一个问题,因为我们之前已经设置configuration不build立它)。 然后,我们可以忽略它们,并使构build在独立的模块上运行:
nmake /I /K
15 – 要完成整合,请按照上面Dan Nissenbaum的post(“步骤3:将Qt5与Visual Studio 2012集成”)的步骤3进行。
只需要提一下,在http://qt-project.org/downloads上有一个针对Visual Studio 2012的预编译版本Qt 5.2。 所以如果你对从源代码构buildQt 5没有特别的兴趣,你也可以使用预构build的二进制文件。
在Tver-Soft网站上还有几个针对不同编译器版本的预编译(x64)二进制文件。
我终于能够使用Visual Studio 2012在Windows 8 x64上用QWebKit编译QT 5.1(git),并认为我也会与那些有问题的人分享我的经验。
在上面的post中说过了第一步和第二步。 我试图做第3步,但SmartGit拉了一堆额外的项目,不会用Qt5编译。 我可以通过从不同的分支克隆(例如https://qt.gitorious.org/qt/qt3d/ )来解决大部分的问题,但是对于每一个额外的模块来说这太繁琐了,所以我决定不编译任何一位。
在ICU支持与VS2012编译器Qt5的32位版本导致Qt5构build失败; Webkit也因此无法告诉我如何解决ICU问题。
在http://download.icu-project.org/files/icu4c/51.2/icu4c-51_2-src.zip下载源代码并添加行;
#define U_CHARSET_IS_UTF8 1
到文件%ICU%\ source \ common \ unicode \ platform.h,其中%ICU%是ICU源代码的path。
在Visual Studio 2012中打开%ICU%\ source \ allinone \ allinone.sln文件并编译。 将%ICU%\ bin添加到您的path中
set PATH=%ICU%\bin64;%PATH%
然后我在QT根目录下运行以下命令
configure -platform win32-msvc2012 -opengl desktop -opensource -debug-and-release -I %ICU%\include -L %ICU%\icu\lib64 -mp -qt-freetype -icu
在这一点上,我开始怀疑没有人试图做我正在做的事情,因为nmake开始抱怨makefile中的意外行(所有这些行都有扩展DerivedSources,例如Makefile.JavaScriptCore.DerivedSources和Makefile.WebCore.DerivedSources ))
(set PATH=<stuff>;%PATH%) && ....
在运行nmake之前手动执行设置的PATH,并删除包括&&例如的字符
(set PATH=<stuff>;%PATH%) && perl -ne "print $1" css\CSSPropertyNames.in ...
变
perl -ne "print $1" css\CSSPropertyNames.in ...
最后,其中一个文件将尝试调用win_flex.exe(或win-flex.exe)而不是flex。 我改变它flex.exe和一切最终编译(必须改变两次,因为我认为该文件得到了重新生成)。
一个使用QWebKit的程序的简短经验,并链接到这个构build导致我相信一切都很好。
–Update–
只是要完成。 根据什么(设置PATH = …;%PATH:)= ^)%)意味着在Windows shell脚本中,以及如何克服Qt5 nmake构build的上下文中的这条线的故障? (指向http://qt-project.org/forums/viewthread/20605 )大多数的Makefile问题应该可以通过使用jsom而不是nmake解决(虽然我仍然怀疑win-flex.exe)
使用visual studio 2015编译Qt 5.5:
1-模式化在qtbase目录下的configure.bat,所以它可以生成configure.exe(只有前18行)
@echo off set QTSRC=%~dp0 set QTDIR=%CD% rem if not exist %QTSRC%.gitignore goto sconf echo Please wait while bootstrapping configure ... for %%C in (cl.exe icl.exe g++.exe perl.exe) do set %%C=%%~$PATH:C rem if "%perl.exe%" == "" ( rem echo Perl not found in PATH. Aborting. >&2 rem exit /b 1 rem ) if not exist mkspecs ( md mkspecs if errorlevel 1 goto exit ) rem perl %QTSRC%bin\syncqt.pl -minimal -module QtCore -outdir "%QTDIR%" %QTSRC% rem if errorlevel 1 goto exit
2- configure -opensource -confirm-license -mp -nomake examples -nomake tests -release -c++11 -no-warnings-are-errors -platform win32-msvc2015 -no-ltcg
3- nmake